私はsakis3gを使用して私の3Gドングルを3Gネットワークに接続するためにpythonのサブプロセスモジュールを使用しています。Pythonのサブプロセスエラー管理。ゼロ以外の終了ステータスをキャッチすることができません
「...このデバイスは、任意のGSM機能を持っていない」 :check_output(['sakis3g', '--sudo', 'connect', 'OTHER="USBMODEM"', 'USBMODEM="12d1:1001"', 'APN="internet"'])
機会に私のドングルが出うんちとの自然の中でエラーを与える可能性があります
は私のコードが使用され、ここを参照してください。
私は完全にそれが必要なので、簡単に再試行とそれは通常うまく動作しますと一緒に暮らすことができます。
ただし、サブプロセスを使用するとエラーreturned non-zero exit status
が発生し、ソフトウェアが完全にクラッシュします。
私は再試行が必要なので、私はtry: ... except: ...
でコードしようとしました。 私がキャッチしようとしているエラーは、です。これは、による0以外の終了ステータスの場合には、check_output
によって返されます。
はしかし、問題を解決していないようでしたこと、問題が解決しない:
Traceback (most recent call last):
File "run.py", line 91, in <module>
print connect_3G()
File "run.py", line 28, in connect_3G
check_call(['sakis3g', '--sudo', 'connect', 'OTHER="USBMODEM"', 'USBMODEM="12d1:1001"', 'APN="internet"'])
File "/usr/lib/python2.7/subprocess.py", line 540, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sakis3g', '--sudo', 'connect', 'OTHER="USBMODEM"', 'USBMODEM="12d1:1001"', 'APN="internet"']' returned non-zero exit status 95
だから私は単にexcept:
を使用することにより、可能な最も広い方法で例外をキャッチしようとしたこれを実行した場合でも、エラーは引き続き発生し、ソフトウェアをクラッシュさせます。
私はこのエラーを正しくキャッチしようとしていますが、この時点で(私にとって)サブプロセスによって引き起こされたエラーを検出するのはむしろ難しいと思われるので、誰にでも正確に何が起きているか教えてください。
は、私がここで使用して意図した完全な機能を参照してください:
def connect_3G():
while True:
check_output(['sakis3g', '--sudo', 'connect', 'OTHER="USBMODEM"', 'USBMODEM="12d1:1001"', 'APN="internet"'])
try:
return 'Connected to ip: {}'.format(json.loads(requests.get('http://httpbin.org/ip').content)['origin'])
except subprocess.CalledProcessError:
print 'Oops, problem connecting to 3G. Better retry fam.'
はブロックを除く試し内にない 'check_output'呼び出しによってスローされる例外のように見えますか? – strubbly
@strubblyそれは問題であるように見えた、私はそれを見落として信じることができない! –