0

Linux の一般的なバージョン (RHEL、opensuse、ubuntu など) 用の強化ツールを作成しています。現在、zypper パッケージ マネージャーを使用して OpenSUSE 環境でコードをテストしています。

私はこのコードスニペットを持っています:

message = subprocess.Popen(["/usr/bin/zypper","-n","install","vlock"],
  stdout=subprocess.PIPE,shell = False) 
details = message.stdout.readlines()
print message.poll()

これにより、パッケージ (この場合は vlock) がインストールされ、シェルからの出力が読み込まれ、0 またはゼロ以外の数値である成功値が出力されます。このコードを Python インタープリターで実行すると、message.poll() または echo $? を出力できます。インタープリターの外部でコマンドを実行すると、成功の場合は 0、失敗の場合はゼロ以外の値が返されます。

ただし、実際にシェルから完全な単体テスト スクリプトを実行すると、次のようになります。

sudo ./pkghelper.py  

message.poll() または echo $? ただし、値が 0 またはゼロ以外の整数である代わりに、None の値が得られます。Python インタープリターの値が整数で、スクリプト実行時の値が None である理由を知っている人はいますか?!?! これは実際にはプログラムの開発を継続する上で大きな障害であり、オンラインで何でも見つけることができます

4

1 に答える 1

1

値はNoneプロセスが実行されているときで、エラーなしで終了した場合は 0 になります。インタープリターで呼び出しているため、プロセスは既に終了しており、リターン コード 0 で終了しています。呼び出し)、プロセスがまだ実行中であることを示す None を取得します。サブプロセスのドキュメントでこれについて説明しています。

于 2012-08-10T21:44:06.483 に答える