我遇到了將我公司的一個腳本從csh轉換爲Python的問題。 csh腳本調用別名命令,但是當我通過os.system()調用相同的別名命令時,它不起作用。在Python 2.3中克服os.system()限制
所以,如果foo
是別名命令:
CSH腳本(這工作,執行FOO):
foo <argument>
的Python(這不起作用,錯誤聲稱foo是一個未知的命令):
os.system("foo <argument>")
我想,一定有某種上下文切換,當我執行python腳本,這會導致Python來無法獲得在T創建別名發生他的殼。在閱讀文檔後,似乎os.system
已被棄用,轉而使用subprocess
,並且subprocess
有一個shell
參數,可能可以幫助我解決問題,因爲我使用Python 2.3和subprocess
isn'直到版本2.4纔可用。
我有想法在python中複製別名。因此,例如,foo
被別名爲cp
。
CSH:
alias foo cp
foo file1 file2
的Python:
os.system("alias foo cp")
os.system("foo file1 file2")
沒有骰子......這裏的錯誤,以及:
sh: line 0: alias: foo: not found
sh: line 0: alias: cp: not found
sh: foo: command not found
我最後的努力是採取的幾行代碼使用foo
,並將它們放入Python將調用的自己的CSH腳本中。但是如果有一種方法可以做到這一點而不訴諸於此,我很想知道這件事。
在此先感謝!
「是什麼讓你覺得os.system會使用csh?」 無知? :)我以爲它只是傳遞一個字符串到命令行。 感謝您的回答。這解決了我遇到的問題,但不幸的是,由於每次調用都在其自己的子shell中運行,因此我將不得不完全找出不同的解決方案。 我的'foo'命令的性質是這樣的,它加載了一堆其他東西供你的腳本使用,所以如果這些東西一旦os.system命令完成就會丟失,那麼它將無法工作。 – 2010-07-15 18:13:36
它確實將這些東西傳遞給命令行。只是沒有單一類型的命令行;)如果它爲後續命令加載其他東西,並且將整個東西轉換爲python,也許應該先將其他東西轉換爲python;) – 2010-07-15 19:35:53