0

実行可能ファイルまたはバッチ ファイルへのユーザー指定のパスを受け取るコードがあります。パスを分割してファイル名とパス (末尾と先頭) を取得し、先頭を新しいプロセスの現在の作業ディレクトリとして使用します。パスにディレクトリが含まれていない場合は、正常に機能します。ただし、そうすると次のエラーが発生します。

WindowsError: [Error 2] The system cannot find the file specified

コード例:

def poop(self, path_to_program):
    head, tail = path.split(path_to_program)
    if(head.startswith('"')):
        head = head.strip('"')

    if(tail.endswith('"')):
        tail = tail.strip('"')                

    if(head<>''):
        p = Popen(tail, cwd=head, shell=False)
    else:
        p = Popen(tail)

path_to_program分割せずに Popen に直接渡せば問題なく動作します。

何が悪いのかわからない。

4

2 に答える 2

5

ドキュメントから:

cwd が None でない場合、実行前に子の現在のディレクトリが cwd に変更されます。このディレクトリは実行可能ファイルの検索時に考慮されないため、cwd からの相対パスを指定できないことに注意してください。

何が起こっているかというと、それcwdは実行可能ファイルが実行されるディレクトリです。サブプロセスが実行可能ファイルを探すディレクトリではありません。あなたが望むかもしれないものは次のとおりです:

p = Popen(path_to_program, cwd=head, shell=False)
于 2012-07-24T17:19:56.980 に答える
1

PopenのPython ドキュメントには、cwd 引数について次のように書かれています。

このディレクトリは、実行可能ファイルの検索時に考慮されないため、プログラムの相対パスを指定できないことに注意してくださいcwd

したがってhead、 が空の文字列でない場合は、次のように Popen を呼び出す必要があると思います。

p = Popen(path_to_program, cwd=head, shell=False)
于 2012-07-24T17:22:33.797 に答える