web-dev-qa-db-ja.com

Python:異なる作業ディレクトリを持つサブプロセス

このディレクトリの下にpythonスクリプトがあります:

work/project/test/a.py

a.py内で、subprocess.POPENを使用して、別のディレクトリからプロセスを起動します。

work/to_launch/file1.pl, file2.py, file3.py, ...

Pythonコード:

subprocess.POPEN("usr/bin/Perl ../to_launch/file1.pl") 

そして、work/project /の下に、次のように入力します

[user@machine project]python test/a.py,

エラー "file2.py、 'そのようなファイルまたはディレクトリはありません'"

work/to_launch/を追加して、これらの依存ファイルfile2.pyを見つけるにはどうすればよいですか?

14
pepero

相対パスは現在の場所(_test/a.py_の1レベル上)に対して相対的に表示されるため、コードは機能しません。

_sys.path[0]_には、現在実行中のスクリプトのパスがあります。

os.path.join(os.path.abspath(sys.path[0]), relPathToLaunch)と_relPathToLaunch = '../to_launch/file1.pl'_を使用して、_file1.pl_への絶対パスを取得し、それを使用してPerlを実行します。

[〜#〜] edit [〜#〜]:file1.plをそのディレクトリから起動してから戻る場合は、現在の作業ディレクトリを覚えてから元に戻します。

_origWD = os.getcwd() # remember our original working directory

os.chdir(os.path.join(os.path.abspath(sys.path[0]), relPathToLaunch))
subprocess.POPEN("usr/bin/Perl ./file1.pl") 
[...]

os.chdir(origWD) # get back to our original working directory
_
16
eumiro

現在の作業ディレクトリではなく、スクリプトに関連するパスを使用します

os.path.join(os.path.dirname(__file__), '../../to_launch/file1.pl)

Python:姉妹ディレクトリのファイルへのパスを取得しますか? に対する私の答えも参照してください。

2
Adam Byrtek

このコードを使用して、現在のディレクトリを設定できます。

import os
os.chdir("/path/to/your/files")
0
anijhaw