いくつかのシェルコマンドを発行する必要があるPythonスクリプトがあります。サブプロセスオブジェクトを作成して、実行するコマンドがあるたびにそれを再利用できると思いました。
これが私のコードの設定方法です:
def setupPipeline(self):
setupShell = subprocess.Popen([''], stdout=subprocess.PIPE, shell=True, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
# Stop running pipeline
setupShell.stdin.write('stop ' + self.Name)
output = setupShell.stdout.read()
print output
# Cancel any running jobs and cleanup variables
setupShell.stdin.write('sudo -u pr cancel ALL')
output = setupShell.stdout.read()
print output
setupShell.stdin.write('sudo -u pr clean ALL')
output = setupShell.stdout.read()
print output
(ここで他の多くのコードをスキップしてください)
if __name__ == '__main__':
#self-test code
pipelineObj = Pipeline(sys.argv)
pipelineObj.setupPipeline()
ただし、コードが2番目のコマンドに到達すると、
IOError: [Errno 32] Broken pipe
サブプロセスオブジェクトを再利用して、すべて同じシェル内で実行する必要のあるコマンドを発行するにはどうすればよいですか?各呼び出しの間に処理が行われているため、これらのコマンドを単純に連鎖させることはできません。