2012-10-16 43 views
-5

如果我從Python解釋器或Python腳本調用腳本文件,則會收到錯誤'No such file or directory',並且Linux腳本不會執行。 如果我打電話給純粹的Linux命令,像subprocess.call('ls'),它可以正常工作。在'C'中,我將使用:system(「」);如何在Linux上從Python調用腳本文件或可執行文件Ubuntu 12.04

Python中的等價物是什麼?

從我的Python腳本中,在Linux計算機上,我需要調用構建的腳本。 subprocess.call適用於Linux shell命令,但我在調用腳本時獲得'No such file or directory'

這裏是我的Python腳本行調用:

rtn_code = subprocess.call(['~/WindRiver/workspace/XPedite5570_SMP_VIP/build_MM_VxWorks']) 

`build_MM_VxWorks` is a Linux script that uses VxWorks development tools to build a VxWorks kernel. 

`build_MM_VxWorks` works okay from the Linux command line. 
+7

你試過指定絕對路徑而不是使用'〜/'表示法嗎? – Amber

+0

〜是shell的一個特性。如果你不調用一個shell,你沒有它。 – bmargulies

+0

您可以通過讀取'os.environ ['HOME']'或'pwd.getpwuid(os.getuid())。pw_dir'的值來近似〜的行爲。 – FatalError

回答

-1

你可能想嘗試pexpect。它在高層次上模擬shell用戶輸入。這可能有點「黑客」,但是當你需要自動化工作流程時,它非常強大。

這是我如何使用它在數據庫中讀表:

import pexpect, getpass 

child = pexpect.spawn('mysql -u root -p') 
child.expect('Enter password: ') 
password = getpass.getpass("Enter Mysql password for user root \n") 
child.sendline(password) 
child.sendline("use database") 

child.expect('Database changed') 

child.sendline('SELECT * FROM table;') 
child.interact() 

正如你看到的,這是很容易模仿用戶輸入。

相關問題