Python:返回ksh函数的输出
在Unix系统上,我该如何把一个ksh函数的输出结果存储到Python变量里呢?这个函数叫做sset
,它是在我的“.kshrc”文件里定义的。
我根据评论的建议,尝试使用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)
1 个回答
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)