繁体   English   中英

在子流程命令中将句子作为参数传递

[英]passing sentence as a argument in subprocess command

我正在另一个脚本中执行python脚本,并想向其传递两个参数

lines = [line.strip('\n') for line in open('que.txt')]
for l in lines:
    print 'my sentence : '
    print l
    #os.system("find_entity.py")  //this also does not work
    subprocess.call(" python find_entity.py l 1", shell=True) //this works but l does not considered as sentence which was read

正确的方法是什么?

更新:

lines = [line.strip('\n') for line in open('q0.txt')]
for line_num, line in enumerate(lines):
    cmd = ["python", "find_entity.py", line]
    subprocess.call(cmd, shell=True)

然后去python终端

您可以使用以下一种字符串替换机制:

或者,如果使用subprocess库,则应将参数作为列表传递给call函数:

subprocess.call(["python", "find_entity.py", line, str(line_num)])

查看lineline_num变量-它们传递时不带引号,因此它们将按值传递。 推荐使用此解决方案,因为它提供了更简洁明了的代码并提供了正确的参数处理(例如,空格转义等)。

但是,如果要对subprocess.call使用shell=True标志,则带有args列表的解决方案将无法代替字符串替换解决方案。 顺便说一句, subprocessos提供了所有Shell功能强大的选项:例如脚本管道,扩展用户主目录(〜)等。因此,如果要编写大型而复杂的脚本,则应使用python库,而不要使用shell=True

您需要变量l的内容(我将其重命名为line),而不是字符串文字“ l”

for line_num, line in enumerate(lines):
    cmd = ["python",
           "find_entity.py",
           line,
           str(line_num)]
    subprocess.call(cmd, shell=True)

如果命令名称及其参数已经在单独的变量中,或者已经在列表中,则几乎永远不会使用shell=True (这不是违法的,但是其行为是无证的,通常不是想要的。)

cmd = ["python", "find_entity.py", line]
subprocess.call(cmd)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM