如何使用选项从python执行脚本

时间:2019-04-12 15:22:21

标签: python-3.x executable

我需要通过python运行以下命令。

const item = { a: 'A', b: 'B', circularProperty: { a: 'A', b: 'B', circularProperty: { a: 'A', b: 'B' } } }; let temp = item.circularProperty; delete item.circularProperty; console.log(item); item.circularProperty = temp; console.log(item);

我遇到的错误是/work/data/get_info name=Mike home。这是不正确的。 get_info程序确实退出。 我正在尝试在python中获得相同功能的perl脚本中工作。

perl脚本

No such file or directory: '/work/data/get_info name=Mike home'

信息转储信息

我的python脚本

$ENV{work} = '/work/data';
my $myinfo = "$ENV{work}/bin/get_info";
$info = `$myinfo name=Mike home`;

我收到一个错误import os, subprocess os.environ['work'] = '/work/data' run_info = "{}/bin/get_info name={} {}".format(os.environ['work'],'Mike','home') p = subprocess.call([run_product_info], stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate()

1 个答案:

答案 0 :(得分:0)

Python subprocess.call认为整个字符串是程序的名称,就像自从将它作为数组传递以来,好像您对"/work/data/get_info name=Mike home"进行了双引号一样。

要么通过不带外壳数组的数组(如果您确定所有转义/引用正确,并且请参阅文档中的警告),要么将其作为单独的数组元素传递。

subprocess.call(['/work/data/bin/get_info', 'name=Mike', 'home'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
subprocess.call('/work/data/bin/get_info name=Mike home', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

https://docs.python.org/3.7/library/subprocess.html#frequently-used-arguments

  

args是所有调用所必需的,并且应为字符串或程序参数序列。通常最好提供一个参数序列,因为它允许模块处理任何必需的参数转义和引用(例如,在文件名中允许空格)。如果传递单个字符串,则外壳程序必须为True(请参见下文),否则该字符串必须简单地命名要执行的程序而无需指定任何参数。