如何使用subprocess模块​​将csh脚本转换为python?

问题描述

如何在子进程中运行多个命令?我想做的是使用子进程模块执行与下面的csh脚本等效的操作。

import subprocess

subprocess.run(['source run.csh'],shell=True,executable='/bin/csh')

作为一个中间步骤,我尝试从python运行脚本。

with subprocess.Popen(...,executable='/bin/csh') as proc:
  proc.communicate('setenv VARIABLE value')
  proc.communicate('source /folder/license_setup.rc')
  proc.communicate('command -flag0 -arg0a -flag1 -arg1a')
  proc.communicate('command -flag0 -arg0b -flag1 -arg1b')
  proc.communicate('command -flag0 -arg0c -flag1 -arg1c')

这工作正常,但是还不是我想要的。我看了一些示例,我认为我需要使用Popen并进行通信,但无法弄清楚该怎么做。我在下面编写了一个简单的伪实现。有人有建议吗?

import subprocess

subprocess.run(['source runa.csh'],executable='/bin/csh')
subprocess.run(['source runb.csh'],executable='/bin/csh')
subprocess.run(['source runc.csh'],executable='/bin/csh')

作为替代方案,我还可以生成多个csh脚本并分别运行它们。但是创建一堆csh脚本并调用所有这些脚本似乎有点愚蠢,而不是用python编写脚本。

{{1}}

(btw:我想使用单独的调用的原因是为了监视tqdm的进度。为了使示例简短,我没有包括tqdm语句。)

解决方法

这是我使用要执行的命令列表的解决方案:

from subprocess import Popen

commands = [
'setenv VARIABLE value','source /folder/license_setup.rc','command -flag0 -arg0a -flag1 -arg1a','command -flag0 -arg0b -flag1 -arg1b','command -flag0 -arg0c -flag1 -arg1c'
]
procs = [ Popen(i,shell=True,executable='/bin/csh') for i in commands ]
for p in procs:
   p.wait()

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...