将变量作为Arugements传递

时间:2017-09-06 19:53:46

标签: python operating-system

我以这种方式将两个varibales传递给另一个python文件。

 os.system('"F:\Main.py" %s `%s' % (id, value))

参考上面的例子:

文件1.py

id="tester"
value="foo boo"
os.system('"F:\Main.py" %s %s' % (id, value))

Main.py

argu1=sys.argv[1]
argu2=sys.argv[2]
print("Argument 1 is", argu1)
print("Argument 2 is", argu2)

打印

Argument 1 is tester
Argument 1 is foo

您可能已经注意到'boo'部分丢失了。
为什么它会丢失,我该如何解决这个问题?

PS。
我使用os.system代替子进程的原因是因为我需要 File 1.py 继续其职责而不必等待 Main.py 完成

2 个答案:

答案 0 :(得分:0)

"boo"sys.argv[3],因为您使用了字符串格式而没有转义来构建命令行字符串,导致调用

os.system('"F:\\Main.py" tester foo boo')

使用subprocess module执行子进程更安全,而不是使用os.system

import subprocess

subprocess.run(["F:\\Main.py", id, value])

但是考虑到其他程序也是一个Python程序,听起来你应该使用单独的脚本来组织你的代码而你应该使用模块和函数,所以用任何工具启动单独的进程可能不是你的方式应该这样做。

如果您不想等待工作人员完成,则可以使用subprocess.Popen代替subprocess.runos.system永远不会给你那种行为; os.system也等待工人完成。不过,最好使用threadingmultiprocessing

此外,应该转义反斜杠,例如"F:\\Main.py",而不是"F:\Main.py"

答案 1 :(得分:0)

这是因为OS按空格分割参数。对于托管,它需要在"name boo"中放置一个变量。在你的情况下:

os.system('"F:\Main.py" "{}" "{}"'.format(id, value))