【问题标题】:How do I convert a csh script to python using the subprocess module?如何使用 subprocess 模块将 csh 脚本转换为 python?
【发布时间】:2020-08-13 13:33:28
【问题描述】:

如何使用子进程运行多个命令?我想做的是使用 subprocess 模块来完成下面的 csh 脚本的等效操作。

#!/bin/csh

setenv VARIABLE value
source /folder/license_setup.rc

command -flag0 -arg0a -flag1 -arg1a
command -flag0 -arg0b -flag1 -arg1b
command -flag0 -arg0c -flag1 -arg1c

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

import subprocess

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

这项工作很好,但还不是我想要的。我查看了示例,我认为我需要使用 Popen 和通信,但不知道如何。我在下面写了一个天真的伪实现。有人有什么建议吗?

with subprocess.Popen(..., shell=True, 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')

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

import subprocess

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

(顺便说一句:我想使用单独调用的原因是使用 tqdm 监视进度。我没有包含 tqdm 语句,以保持示例简短。)

【问题讨论】:

    标签: python subprocess csh


    【解决方案1】:

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

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      相关资源
      最近更新 更多