3

Python スクリプトを使用して大規模なシステムを構築しようとしています。まず、Visual Studio の環境をセットアップする必要があります。問題が発生したので、Visual Studio をセットアップして起動できるかどうかを確認することにしました。最初にいくつかの環境変数を設定してから、C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat x64.

これが終了したら、 を呼び出しますdevenv /useenv。コマンド プロンプトからこれらを実行すると、すべて正常に動作し、VS で必要なことを実行できます。これを行うための私のpythonコードは次のとおりです。

import os
vcdir=os.environ['ProgramFiles(x86)']
arch = 'x64'
command  = 'CALL "' +vcdir+'\\Microsoft Visual Studio 11.0\\VC\\vcvarsall.bat" '+arch
os.system(command)
command = "CALL devenv /useenv"
os.system(command)

これを実行すると、bat ファイルが実行され、devenvコマンドを実行しようとすると、認識されないことがわかります。スクリプトが実行されているサブプロセスとは異なるサブプロセスでファイルが実行されているようです。現在のプロセスでこれを実行する必要があります。私の最終的な目標は、Python スクリプト内でビルド全体を実行することdevenvであり、ビルドの大部分を実行するための多くの呼び出しがあります。

ありがとうございました。

4

6 に答える 6

1

あなたがやろうとしていることはうまくいきません。 vcvarsall.bat特定のプロセス内でのみ機能する環境変数を設定します。また、PythonプロセスがCMD.exe同じプロセススペース内でプロセスを実行する方法はありません。

私はあなたのためにいくつかの解決策を持っています。

1つは、を実行してからvcvarsall.bat、設定するすべての環境変数を把握し、Pythonに設定させることです。このコマンドset > file.txtを使用して、CMDシェルからすべての環境変数を保存してから、Pythonコードを記述してこのファイルを解析し、環境変数を設定できます。おそらく仕事が多すぎます。

もう1つは、を実行するバッチファイルを作成し、vcvarsall.batそのバッチファイル内から新しいPythonインタープリターを起動することです。新しいPythonインタープリターは新しいプロセスに含まれますが、プロセスの下の子プロセスになり、CMD.exeすべての環境変数を継承します。

または、うーん。おそらく最良のことはvcvarsall.batdevenvコマンドを実行してから実行するバッチファイルを作成することです。ええ、それはおそらく最も単純で、単純なのが良いです。

注意すべき重要な点は、Windowsバッチファイル言語(およびその前のDOSバッチファイル)では、別のバッチファイルを実行すると、他のバッチファイルによって設定された変数が同じ環境に設定されることです。source* NIXでは、同じ環境でシェルスクリプトを実行するために特別なコマンドを使用する必要がありますが、バッチでそれが機能する方法です。ただし、プロセスが終了した後も変数が持続することはありません。

于 2013-02-04T23:41:27.183 に答える
0

使用する必要があるのは、標準ライブラリ内のモジュールです。subprocess

ここに標準ライブラリの例をリンクしました

これがあなたの状況の例です。

import shlex, subprocess
args = shlex.split(your_command)
p = subprocess.Popen(args)

呼び出しで何が起こったかを知る必要がある場合は、stderrも返します。コマンドは、2つのbatファイルを含む3番目のbatファイルである場合もあるため、すべての環境変数を取得できます。

于 2013-02-04T23:45:03.363 に答える