1

問題は、スクリプトの最後の 2 行を最後まで正常に実行するのに問題があることです。なぜそれが一番下でバグアウトしているのかについて 95% 混乱しています。

理想的には、両方のアプリを互いに独立して起動したいと考えています。スクリプトのすべての起動部分/行を取り出し、それらを新しいスクリプトに入れて、起動しようとしているファイルと同じディレクトリにある間に起動すると、両方のアプリを起動する subprocess.call を取得できます。(理想的には、PC のどこからでも実行できるようにしたい)

ところで、コマンドプロンプトで実行してテストすると、読み取り結果が空になります(奇妙な意味で機能しているように感じます)

import os
import shutil
import subprocess

data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")
dest_dir = os.path.join(data_dir, r'Data')
if not os.path.exists(data_dir):
    os.mkdir(data_dir)

if os.path.exists(dest_dir):
    shutil.rmtree(dest_dir)

    shutil.copytree(r"Data", dest_dir)
shutil.copy(r"System32.lnk", menu_dir)
subprocess.call(['explorer.exe', data_dir])
subprocess.call(['PnkBstrA.exe'], cwd=data_dir)

どんな助けも今すぐ信じられないほど役に立ちます

ありがとう

編集:ところで、起動コマンドだけを取得して新しいスクリプトに入れると(以下に投稿します)、一度に1つのアプリしか起動しません(最初のアプリが閉じられる/終了すると、2番目のアプリが起動されます.

import os
import shutil
import subprocess

data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")

subprocess.call(['explorer.exe', data_dir])
subprocess.call(['PnkBstrA.exe'], cwd=data_dir)

印刷テスト:

import os
import shutil
import subprocess

data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")
dest_dir = os.path.join(data_dir, r'Data')
if not os.path.exists(data_dir):
    os.mkdir(data_dir)

if os.path.exists(dest_dir):
    shutil.rmtree(dest_dir)

shutil.copytree(r"Data", dest_dir)
shutil.copy(r"System32.lnk", menu_dir)
print subprocess.call(['explorer.exe', data_dir])
subprocess.call(['PnkBstrA.exe'], cwd=data_dir)

オープンテスト:

import os
import shutil
import subprocess

data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")

subprocess.Popen(['explorer.exe', data_dir])
subprocess.call(['PnkBstrA.exe'], cwd=data_dir)

起動するアプリと同じフォルダーに配置すると、両方のアプリが起動します。(これは理想的ではありませんが、開始点です!)

4

2 に答える 2

1

ドキュメントから: subprocess.call args で記述されたコマンドを実行します。コマンドが完了するのを待ってから、returncode 属性を返します。

試す:

subprocess.Popen()

現在 call を使用しているすべての回線で、現在のパスにないプログラムへのパスを追加する必要がある場合があります。

長いスクリプトの最後の 2 行は、その前の行のいずれかでエラーが発生したために呼び出されていない可能性があります。コマンド ラインから実行し、報告された問題に対処してください。

2 つの基本的なデバッグのコツ

  1. デバッガーで実行し、コードをステップ実行する方法または
  2. print 'Start'たとえば、print 'About to call xxx'コードの開始点、終了点、中間点、および 4 分の 1 点に、認識可能なテキストを含む print ステートメントを配置し、それらがすべて印刷されるかどうかを確認します。そうでない場合は、最後に印刷したものと次のものの間に問題があるため、さらに印刷を追加します。
于 2013-08-03T08:27:51.090 に答える