2013-05-01 230 views
1

我有舊的python。所以不能使用子進程。 我有兩個python腳本。一個primary.py和另一個secondary.py。 運行primary.py時,我需要運行secondary.py。用os.system運行另一個python腳本

格式運行secondary.py是 '蟒蛇secondary.py參數'

os.system('python secondary.py Argument')...is giving error saying that can't open file 'Argument': [Errno 2] No such file or directory

+0

你可以* *使用[子反向移植(https://code.google.com/p/python-subprocess32/)。 – 2013-05-01 20:55:20

+0

您在下面的評論中提到您使用的是Python 2.6。子進程可用於該版本的Python。 – SethMMorton 2013-05-01 21:22:16

回答

1

給你描述的代碼,能夠拿出有三個原因這個錯誤:

  • python ISN對您的PATH
  • secondary.py不在您當前的工作目錄中。
  • Argument不在您當前的工作目錄中。

從你編輯的問題,這聽起來像它的最後三個,這意味着問題可能有無關system在所有...但讓我們看看如何解決反正所有三個。

首先,您需要的路徑與運行primary.pypython相同,這是sys.executable的用途。

然後你想要一個路徑secondary.py。不幸的是,對於這一個,沒有辦法(在Python 2.3中)可以保證工作......但在許多POSIX系統中,在很多情況下,sys.argv\[0\]將是絕對路徑,因此您可以僅使用dirnamejoin中的os.path將其轉換爲絕對路徑secondary.py

然後,假設Argument是在腳本目錄,做同樣的事情:

my_dir = os.path.dirname(sys.argv[0]) 
os.system('%s %s %s' % (sys.executable, 
         os.path.join(my_dir, 'secondary.py'), 
         os.path.join(my_dir, 'Argument'))) 
0

哪個Python版本,你呢? 你能顯示你的secondary.py的內容嗎? 對於較新的版本,它似乎正常工作:

[email protected]:$ cat f.py 
import os 
os.system("python s.py Arg") 

[email protected]:$ cat s.py 

print "OK!!!" 
[email protected]:$ python f.py 
OK!!! 
[email protected]:$ 
+0

僅僅因爲它在一種情況下工作並不意味着它可以在任何可能的情況下工作。例如,如果'python'不在PATH上,並且你在shell上執行'/ opt/python23/bin/python f.py',你的代碼將不起作用。 – abarnert 2013-05-01 20:59:35

+0

我應該更清楚。這兩個文件primary.py和secondary.py在同一目錄.....我有python 2.6.2 ......我需要在shell中運行secondary.py參數.... secondary.py基本上在當前目錄中搜索名稱爲「Argument」的文件並打印它們....當我單獨運行secondary.py時,它工作在fin ...只有當我嘗試通過primary.py來完成時,我得到錯誤.....非常感謝 – user2340760 2013-05-01 21:03:28

+0

是的,我很清楚這個例子不是一個證明。無論如何,對於我來說,有這樣的信息是非常意外的:'無法打開文件'參數'' - 如果PATH會出現問題,那麼消息會說'python'或'secondary.py'無法打開。 – ddzialak 2013-05-01 21:06:54

相關問題