在Python程序中启动非常复杂的命令

时间:2018-08-20 13:20:16

标签: python shell command-line subprocess popen

在Python程序中,我需要启动一个复杂的命令,实际上是一个需要大量参数的python程序。我需要启动的是这样的:

./calculations.py -id -k "{'names':['r','pst'],'index_IN':['at','gl'],'index_OUT':[1,1]}"

                      -r "[False,False]" -N "[False,False]" -c "['values1**2','np.exp(values2)']"

                       $SCRATCH/my_dir/*

(实际上,它甚至更复杂,但主要思想在此示例中)。

因此,关键点在于示例中同时存在"',以及计算的使用(平方数和numpy的幂运算)。我已经尝试过subprocess.Popen,但以某种方式无法使它正常工作。我的尝试:

proc = subprocess.Popen(["./calculations.py -id", "-k", 

       "{'names':['r','pst'],'index_IN':['at','gl'],'index_OUT':[1,1]}"], ........])

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您需要同时使用'和',则可以将字符串另存为带有r前缀的python中的原始字符串,而不考虑使用原始的长python字符串:

cmdAttributes = r"""{'names':['r','pst'],'index_IN':['at','gl'],'index_OUT':[1,1]}"""

使用灵活的条目也是一样:

pnames = r"['r','pst']"
pindex_IN = r"['at','gl']"
pindex_OUT = r"[1,1]"

cmdAttributes = r"""{{'names':{Names},'index_IN':{Index_IN},'index_OUT':{Index_OUT} }}""".format(
        Names = pnames,
        Index_IN = pindex_IN,
        Index_OUT = pindex_OUT)

两个代码的cmdAttributes都相同。