14

Linux と Windows の両方で実行し、パスに存在する実行可能ファイル (パラメーター付き) を使用する必要があるプログラムを作成しています。(想定)

現在、Subprocess.Call と Subprocess.Popen を使用して Windows で実行可能ファイルを実行する際に問題があります。

このようなコードの場合、Windows 8 では

def makeBlastDB(inFile, inputType, dbType, title, outDir):
    strProg = 'makeblastdb'
    strInput = '-in ' + inFile
    strInputType = '-input_type ' + inputType
    strDBType = '-dbtype ' + dbType
    strTitle = '-title ' + title
    strOut = '-out ' + os.path.join(os.sep, outDir, title)
    cmd = [strProg, strInput, strInputType, strDBType, strTitle, strOut]
    result = Popen(cmd, shell=True)

コンソールにエラー メッセージが表示される

'makeblastdb' is not recognized as an internal or external command,
operable program or batch file.

cmd.exe を使用して同じコマンドを実行できますが、shell=False で同じ応答が得られます。

実行可能ファイルが PATH 環境変数にあると仮定してコマンドを実行する方法についてのアイデアはありますか? ありがとう

4

4 に答える 4

8

envキーワード引数を使用してマッピングを渡すことにより、生成されたサブプロセスで使用可能な環境変数を制御できます。例えば

proc = subprocess.Popen(args, env={'PATH': '/some/path'})

PATHまたは、システム環境から他のすべてを必ずしもチャックすることなく、システム環境変数から継承するには:

proc = subprocess.Popen(args, env={'PATH': os.getenv('PATH')})

ただし、絶対パスを使用する方が簡単/簡単かもしれません。

于 2013-02-04T02:12:10.147 に答える
7

さて、これが私がそれを機能させる方法です。

env = os.environ
proc = subprocess.Popen(args, env=env)
于 2013-02-22T03:31:05.420 に答える
5

この python bug reportを見つけるまで、私はこれに苦労しました。

「ディレクトリが引用符で囲まれるように Windows の PATH にディレクトリを追加すると、サブプロセスは実行可能ファイルを見つけられません。」Windowsでは引用符は必要ないため、引用符を削除すると問題が解決します(2.7)。

于 2013-06-14T17:03:58.283 に答える
0

私の同僚は、Windows 10 64 ビット上の Python 3.6.5 でこの問題を再現しました。

ただし、インストールされている Python のバージョンは 32 ビットでした。

Python の 64 ビット バージョンを再インストールすると、この問題が修正されました。

于 2018-12-12T10:33:27.430 に答える