Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重用子流程对象_Python_Shell_Subprocess - Fatal编程技术网

Python 重用子流程对象

Python 重用子流程对象,python,shell,subprocess,Python,Shell,Subprocess,我有一个Python脚本,需要发出许多shell命令。我想我可以创建一个subprocess对象,然后在每次有命令执行时重用它 以下是我设置代码的方式: def setupPipeline(self): setupShell = subprocess.Popen([''], stdout=subprocess.PIPE, shell=True, stderr=subprocess.PIPE, stdin=subprocess.PIPE) # Stop running pipel

我有一个Python脚本,需要发出许多shell命令。我想我可以创建一个subprocess对象,然后在每次有命令执行时重用它

以下是我设置代码的方式:

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
(此处跳过许多其他代码)

然而,当代码到达第二个命令时,我得到一个

IOError: [Errno 32] Broken pipe

如何重用subprocess对象来发出需要在同一shell中执行的命令?这些命令不能简单地链接在一起,因为每次调用之间都有处理过程。

创建一个执行shell的子进程,并向该子进程发送命令。您正在shell中运行一个空命令,这会导致它执行该空命令,然后退出

shell = subprocess.Popen("/bin/bash -i".split(), stdin=subprocess.PIPE,
                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)

你可以考虑使用,因为听起来你在重新创建它的路上已经很好了。

< p>创建执行shell的子进程,并将命令发送给该子进程。您正在shell中运行一个空命令,这会导致它执行该空命令,然后退出

shell = subprocess.Popen("/bin/bash -i".split(), stdin=subprocess.PIPE,
                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)

<>你可能会考虑使用,因为听起来你在重新创建它的路上很不错。

(a)为什么你必须一遍遍地重复使用同一个shell?(b) 你为什么一定要用贝壳?您可以简单地——并且确信
PATH
IFS
环境变量将影响程序的执行。因为每个命令的结果都需要影响后续命令的shell环境。(a)为什么必须反复使用同一shell?(b) 你为什么一定要用贝壳?您可以简单地--并且确信
路径
IFS
环境变量将影响程序的执行。因为每个命令的结果都需要影响后续命令的shell环境。我以为我是用“setupShell=”行来做的。我想如果我没有发出一个初始命令,它只会创建一个shell进程而不退出。不,看看你在那一行执行的是什么命令:
'
shell=True
意味着空命令将在shell中执行,但在执行空命令后,如何保持shell运行?没什么,就是这样。谢谢你的反馈和链接。我以为我是用“setupShell=”行来做的。我想如果我没有发出一个初始命令,它只会创建一个shell进程而不退出。不,看看你在那一行执行的是什么命令:
'
shell=True
意味着空命令将在shell中执行,但在执行空命令后,如何保持shell运行?没什么,就是这样。谢谢你的反馈和链接。