由於我是更多的ServerFault人,所以我第一次問了一些幫助。使用Python和subprocces.call執行腳本的問題尚未在Bash中起作用
我在Python中做了一些腳本,我一直熱愛這門語言,但是我有這個讓我的腳本無法工作的小問題。
這裏是有問題的代碼行:
subprocess.call('xen-create-image --hostname '+nom+' --memory '+memory+' --partitions=/root/scripts/part.tmp --ip '+ip+' --netmask '+netmask+' --gateway '+gateway+' --passwd',shell=True)
我試圖與os.popen同樣的事情。所有變量都被正確設置。
當我在我的常規Linux shell中執行有問題的命令時,它工作得很好,但是當我使用我的Python腳本執行它時,我遇到了奇怪的錯誤。我甚至用print函數替換了subprocess.call(),以確保我使用了命令的確切輸出。
我去了解我的shell的環境變量,但他們幾乎是一樣的......我會發布我得到的錯誤,但我不確定它與我的問題有關。
使用在/usr/share/perl5/Config/IniFiles.pm線未初始化值$線[0]中取代(S ///)614 在模式匹配使用未初始化值$ _的( m //)在/usr/share/perl5/Config/IniFiles.pm 628行。
我不是Python專家,所以我很可能在這裏丟失了一些東西。
預先感謝您的幫助,
安東尼
編輯
繼miax的建議下,我停止使用shell =真。相反,我看了一下Python的文檔subprocess和使用下面的代碼:
cmd = 'xen-create-image --hostname '+nom+' --memory '+memory+' --partitions=/root/scripts/part.tmp --ip '+ip+' --netmask '+netmask+' --gateway '+gateway+' --passwd'
args = shlex.split(cmd)
subprocess.call(args)
可悲的是,它不會改變任何東西......
EDIT2
我已經使用了miax給出的提示,但是我仍然得到上面的錯誤...這是我使用的代碼。
cmd = ['xen-create-image', '--hostname', nom, '--memory', memory, '--partitions=/root/scripts/part.tmp', '--ip', ip, '--netmask', netmask, '--gateway', gateway, '--passwd']
subprocess.call(cmd)
這真是奇怪......當我在常規shell中運行它確切的命令工作正常...
有點奇怪,它會讓你在運行Python時遇到Perl錯誤。真的很愚蠢的問題:你確定你使用#!/ usr/bin/python而不是#!/ usr/bin/perl例如? – 2010-05-25 22:36:58
xen-delete-image是一個Perl腳本。我的確在使用/ usr/bin/python。 – 2010-05-25 22:38:59