8

Python 2.6.4 の Windows バージョン: shell=True の使用時に subprocess.Popen() が失敗するかどうかを判断する方法はありますか?

shell=False の場合、Popen() は正常に失敗します

>>> import subprocess
>>> p = subprocess.Popen( 'Nonsense.application', shell=False )
Traceback (most recent call last):
  File ">>> pyshell#258", line 1, in <module>
    p = subprocess.Popen( 'Nonsense.application' )
  File "C:\Python26\lib\subprocess.py", line 621, in __init__
    errread, errwrite)
  File "C:\Python26\lib\subprocess.py", line 830, in
_execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

しかし、shell=True の場合、Popen() 呼び出しが成功したかどうかを判断する方法がないようです。

>>> p = subprocess.Popen( 'Nonsense.application', shell=True )
>>> p
>>> subprocess.Popen object at 0x0275FF90>>>
>>> p.pid
6620
>>> p.returncode
>>>

アイデアを歓迎します。

よろしく、マルコム

4

2 に答える 2

16

returncodeが機能しNoneますが、 を呼び出すまでは機能しますp.poll()poll()それ自体がエラーコードを返すので、あなたはただ行うことができます

if a.poll() != 0:
    print ":("
于 2010-05-18T22:27:32.580 に答える
5

最初のケースでは起動に失敗し、2 番目のケースではシェルを正常に起動し、アプリケーションの実行に失敗します。したがって、プロセスは適切に生成され、終了し、終了コードについて問い合わせるのを待っています。つまり、シェルまたは環境 (メモリがないなど) が完全に壊れていない限り、Popenそれ自体が失敗する可能性はありません

だから、あなたは安全.poll().wait()すべての悲しいニュースを手に入れることができます.

于 2010-05-18T22:27:22.833 に答える