2011-09-27 97 views
1

在Unix上,如何才能將ksh函數的輸出作爲Python變量來輸出? 該函數被稱爲sset,並在我的「.kshrc」中定義。Python:返回ksh函數的輸出

我嘗試根據評論推薦使用subparser模塊。這是我想出了:

import shlex 
import subprocess 

command_line = "/bin/ksh -c \". /Home/user/.khsrc && sset \"" 
s = shlex.shlex(command_line) 

subprocess.call(list(s)) 

而且我得到一個Permission denied錯誤。這裏的回溯:

Traceback (most recent call last): 
    File "./pymss_os.py", line 9, in <module> 
    subprocess.call(list(s)) 
    File "/Soft/summit/tools/Python-2.7.2/Lib/subprocess.py", line 493, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "/Soft/summit/tools/Python-2.7.2/Lib/subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "/Soft/summit/tools/Python-2.7.2/Lib/subprocess.py", line 1228, in _execute_child 
    raise child_exception 
OSError: [Errno 13] Permission denied 

額外的細節:

  • 的Python 2.7
  • KSH版M-11/16/88I
  • 的Solaris 10(在SunOS 5.10)
+3

搜索。這裏有一個提示。在這裏搜索「subprocess」和「collect output」和「python」。 –

+0

[如何在Python中調用外部命令]可能的重複(http://stackoverflow.com/questions/89228/how-to-call-external-command-in-python) –

+0

http://stackoverflow.com/search q =%5Bpython%5D + +殼管 – sehe

回答

3

shlex沒有做你想做的事:

>>> list(shlex.shlex("/bin/ksh -c \". /Home/user/.khsrc\"")) 
['/', 'bin', '/', 'ksh', '-', 'c', '". /Home/user/.khsrc"'] 

您正試圖執行根目錄,這是不允許的,因爲它是一個目錄而不是可執行文件。

相反,只是給節目的名稱subprocess.call名單和所有參數:

import subprocess 

command_line = ["/bin/ksh", "-c", "/Home/user/.khsrc"] 
subprocess.call(command_line)