我以这种方式将两个varibales传递给另一个python文件。
os.system('"F:\Main.py" %s `%s' % (id, value))
参考上面的例子:
id="tester"
value="foo boo"
os.system('"F:\Main.py" %s %s' % (id, value))
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 完成
答案 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.run
。 os.system
永远不会给你那种行为; os.system
也等待工人完成。不过,最好使用threading
或multiprocessing
。
此外,应该转义反斜杠,例如"F:\\Main.py"
,而不是"F:\Main.py"
。
答案 1 :(得分:0)
这是因为OS按空格分割参数。对于托管,它需要在"name boo"
中放置一个变量。在你的情况下:
os.system('"F:\Main.py" "{}" "{}"'.format(id, value))