0

subprocess.Popen を使用してメモ帳 ++ でテキスト ファイルを開こうとしています。

次のコードのさまざまなバリエーションを試しましたが、どれも機能しません。

 subprocess.Popen(['start notepad++.exe', 'C:\Python27\Django_Templates\QC\postits.html'])

 subprocess.Popen(['C:\Program Files (x86)\Notepad++\notepad++.exe', 'C:\Python27\Django_Templates\QC\postits.html'])

これを行う方法があるはずです。

ノート:

os.system ではなく subprocess.Popen を使用したいのは、ポーリングしてプログラムがまだ開いているかどうかを判断し、閉じた後に何かを実行したいからです。

したがって、これは次のコード ブロックの一部です。

process = subprocess.Popen(.....)
while process.poll() is None:
    sleep(10)
DO SOMETHING AFTER FILE CLOSES

Popen がこれを行うための最良の方法ではない場合、システム (Windows) をポーリングして notepad++ がまだ開いているかどうかを判断し、閉じた後に何かを実行できるようにするソリューションを受け入れます。

4

1 に答える 1

3

問題は、パス区切り文字が Python 文字列エスケープ文字であるバックスラッシュであることだと思います。

代わりに生の文字列を使用します。

subprocess.Popen([
    r'C:\Program Files (x86)\Notepad++\notepad++.exe', 
    r'C:\Python27\Django_Templates\QC\postits.html'
])

または、バックスラッシュをエスケープします:

subprocess.Popen([
    'C:\\Program Files (x86)\\Notepad++\\notepad++.exe', 
    'C:\\Python27\\Django_Templates\\QC\\postits.html'
])

または、os.path.joinハードコードされたパス区切りではなく、使用することをお勧めします。

于 2013-11-04T16:15:37.800 に答える