Python: возвращать вывод функции ksh

1

В 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:

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 комментарий
Теги:
exec
ksh

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню