如何在一个进程中运行多个shell命令?
综合示例:我想在其中创建一个目录和一个子目录。
如果我这样做:
subprocess.call('mkdir dir', shell=True)
subprocess.call('cd dir', shell=True)
subprocess.call('mkdir subdir', shell=True)
然后每个命令将在其自己的子进程中执行,而不是 dir / subdir,我将获得同一级别的 dir 和 subdir。
选项
command = 'mkdir dir && cd dir && mkdir dir2'
subprocess.call(command, shell=True)
看起来不太好,如果我想获取每个命令的返回码或标准输出,也不会起作用。
ps os.chdir() 也是错误的,问题是,如何在同一个进程中运行多个shell命令?
您的问题已经包含在单个 shell 中运行多个 shell 命令的代码:
为了大型命令的可读性,您可以在多行命令中使用三重引号
"""..."""。如果您不想
&&使用它,那么根据您的任务,您可以set -e -o pipefail在开头添加一个类似物(连同executable='/bin/bash')。“获取每个命令的返回码或标准输出”。,可以通过
echo $?在每条命令后插入模拟输出每条命令的状态,并用于pexpect在提示符(prompt)出现后输出,当个别命令完成后,很容易拉出。请参阅 python 子进程通信中的多个输入和输出。显然,如果你运行的命令不是shell内置的,那么一个进程是不够的(每个外部命令至少启动一个新的OS进程)。
此外,为了正确提取输出,您应该设置该值
$PS1,以便在命令的输出中找不到它。例如,如果您按 拆分输出'> ',那么如果任一命令打印 ,这可能会中断'> '。查看这些pexpect.pxssh.set_unique_prompt()方法是如何.prompt()实现的。鱼在特
subprocess.Popen。在其中,进程被配置并独立于python程序的线程运行。