17

このディレクトリの下にある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できますか?

4

3 に答える 3

16

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

現在sys.path[0]実行中のスクリプトのパスがあります。

os.path.join(os.path.abspath(sys.path[0]), relPathToLaunch)withを使用しrelPathToLaunch = '../to_launch/file1.pl'て絶対パスを取得し、それを使用してfile1.pl実行perlします。

編集: 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
于 2010-09-21T16:48:47.320 に答える
3

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

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

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

于 2010-09-21T17:42:01.640 に答える
0

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

import os
os.chdir("/path/to/your/files")
于 2010-09-21T16:57:31.470 に答える