popenの作業ディレクトリを指定するにはどうすればよいですか


187

Pythonでコマンドの実行ディレクトリを指定する方法はありますsubprocess.Popen()か?

例えば:

Popen('c:\mytool\tool.exe', workingdir='d:\test\local')

私のPythonスクリプトは C:\programs\python

C:\mytool\tool.exeディレクトリで実行することは可能D:\test\localですか?

サブプロセスの作業ディレクトリを設定するにはどうすればよいですか?


2
subprocess.callはsubprocess.Popenの薄いラッパーにすぎず、このラッパーは少なくとも私が覚えている限り、Popenのすべての引数も処理することに注意してください:)単純なケースでは、subprocess.call
shabunc

回答:


270

subprocess.Popen cwd現在の作業ディレクトリを設定する引数取ります。バックスラッシュ('d:\\test\\local')をエスケープするかr'd:\test\local'、バックスラッシュがPythonによってエスケープシーケンスとして解釈されないように使用することもできます。あなたがそれを書いたように、\t部分はに翻訳されますtab

したがって、新しい行は次のようになります。

subprocess.Popen(r'c:\mytool\tool.exe', cwd=r'd:\test\local')

Pythonスクリプトパスをcwdとして使用し、これを使用してimport oscwdを定義するには:

os.path.dirname(os.path.realpath(__file__)) 

2
引数にShell = Trueを追加すると、cwdの設定にもどのような影響がありますか?
T.ストーン

3
@T。Stone:スタンドアロンの実行可能ファイルの場合、exeがシェル内のいくつかの環境変数に依存していない限り、何も変更しないでください。しかし、でshell=False、次のような組み込みのシェルを使用することはできませんcd。つまり、シェルの両方の方法でLinux上でこれを試してください:subprocess.Popen("cd /tmp; pwd")
マーク・Rushakoff

12
少なくともpython 3では、Windowsマシンでバックスラッシュを使用する必要はありません。使用しただけsubprocess.call(["C:/Users/Bob/Some.exe"], cwd="C:/Users/Jane/")で問題なく動作します
mgrandi

7
作業ディレクトリは絶対パスでなければなりませんか?
DXsmiley、2015年

10
また、subprocess.check_output()でも機能します。よろしくお願いします!
Samuel Dauzon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.