Python:返回ksh函数的输出

1 投票
1 回答
1254 浏览
提问于 2025-04-17 03:10

在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)

撰写回答