2

以下に示すように、subprocess.callを使用してPythonからプロセスを呼び出そうとしています。

from subprocess import call

exePath = 'C:\\Test\\EXE.exe'
inPath = 'C:\\Test\\IN.in'
outPath = 'C:\\Test\\OUT.out'
call([exePath, inPath, outPath])

これにより、EXE.exeから数行が出力され、その後に「ハンドルが無効です」が続きますが、エラーとしてではなく文字列として出力されるため、EXE.exeからのメッセージである可能性があります。

Unzipping Solution...
0.0%                       The handle is invalid.

ただし、cmd.exeを開いて貼り付けると、次のようになります。

C:\Test\EXE.exe C:\Test\IN.in C:\Test\OUT.out

それはうまくいきます。

誰かが私を正しい方向に向けることができますか?

ありがとう!

私はWindows7でPython2.764ビットを実行しています。

編集:

これは、コンソールが行を上書きするプロセスからのstdoutを処理できないPyDevの問題のように見えます。コードはIDLEから正常に実行されます。まだPyDevの修正を探しています...

4

1 に答える 1

3

PyDevは実際の端末ではないため、この問題が発生していると思います(つまり、Pythonでは、os.isatty()はPyDevから実行するとFalseを返します)。

exeが本当に端末を持っていることに依存している場合、現在、PyDevができることはあまりありません...

今のところ、Pythonから次のように呼び出すことができます。

Windowsの場合:

popen = subprocess.Popen(['myexe', 'params'], creationflags=subprocess.CREATE_NEW_CONSOLE)
popen.wait()

Linuxの場合(CREATE_NEW_CONSOLEは使用できないため):

args = ['xterm', '-e'] + ['myexe', 'params']
popen = subprocess.Popen(args)
popen.wait()

誰が呼んでも機能するように:)

Aptana Studioには実際の端末の代替品があると思いますが、それを起動するためのPyDev統合はありません...

于 2012-04-20T11:26:27.107 に答える