2017-09-06 182 views
-1

以這種方式將兩個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。
的IM使用的原因,而不是子過程中使用os.system是因爲我需要文件1.py繼續其職責,而不需要等待 Main.py完成

+0

這就是爲什麼你不應該爲'os.system'建立命令行字符串。 – user2357112

回答

0

"boo"sys.argv[3],因爲您使用的字符串與沒有逃脫建立你的命令行字符串,導致通話

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

而不是使用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"

+0

我使用os.system而不是子進程的原因是因爲我需要File 1.py繼續執行它的任務,而不必等待Main.py完成 – Elo97234c

+0

@ Elo97234c:'os.system'也等待另一個進程完。 – user2357112

+0

不,它不。它啓動python文件,就是這樣。它不是一個子過程。它的一個新進程 – Elo97234c

0

發生這種情況是因爲操作系統按空格分隔參數。對於託管,它需要在"name boo"中放置一個變量。在你的情況下:

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

我的完整文件路徑是「F:\ Program Test \ Main.py」,通過嘗試你的代碼得到'''F:\ Program'不被識別爲內部或外部命令, 可操作的程序或批處理文件。 – Elo97234c

+0

'Program'和'Tes't之間的間距導致我嘗試用''替換''的問題並在開始時添加了'@'仍然沒有運氣 – Elo97234c

相關問題