Я пытаюсь запустить исполняемый файл на Линукс Max OS X 10.11.6 через python2.7Как Python команду subprocess.check_output Линукс на Mac OS
Я хотел бы использовать subprocess.check_output.
Команда, которая работает с помощью терминала:
mosel -c "exec PATH/TO/SCRIPT arg1='value1', arg2='value2'"
Однако, когда я пытаюсь:
subprocess.check_output(['mosel','-c',cmd])
где
cmd="exec PATH/TO/SCRIPT arg1='value1', arg2='value2'"'
я получаю:
File "/usr/local/lib/python2.7/site-packages/subprocess32.py", line 629, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
File "/usr/local/lib/python2.7/site-packages/subprocess32.py", line 825, in __init__
restore_signals, start_new_session)
File "/usr/local/lib/python2.7/site-packages/subprocess32.py", line 1574, in _execute_child
raise child_exception_type(errno_num, err_msg)
OSError: [Errno 2] No such file or directory: 'mosel'
Я смог заставить его «эхо» команды в выходной файл, но я не могу запустить «какой mosel» через python, что заставляет меня думать, что это связано с check_output, используя «bin/sh» as исполняемый файл.
Итак, мне нужно использовать "POPEN" вместо и установить
executable=path/to/mosel
?
Если да, то как использовать Python, чтобы получить путь пользователя к mosel (т. Е. Получить результат «какой mosel»)?
Спасибо!
UPDATE:
PyCharm не видел системные пути, которые я установил, используя этот ответ: Setting environment variables in OS X?
Теперь, кажется, что
subprocess.check_output(['mosel','-c',cmd])
Посылает квадратные скобки в командной строки, поскольку он теперь возвращает:
dyld: Library not loaded: libxprm_mc.dylib
Referenced from: /usr/local/opt/xpress/bin/mosel
Reason: image not found
Traceback (most recent call last):
File "/Users/nlaws/projects/sunlamp/sunlamp-ss/RunScenarios/run.py", line 70, in <module>
run(1)
File "/Users/nlaws/projects/sunlamp/sunlamp-ss/RunScenarios/run.py", line 44, in run
out = check_output(['mosel', '-c', cmd])
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 219, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['mosel', '-c', cmd]' returned non-zero exit status -5
Или есть еще проблема? (Я могу запустить mosel -c cmd
через терминал mac, но не в pycharm через python, ни в терминале mac через python).
Когда 'shell = False', вы * имеете *, чтобы передать список строк. поэтому последний пример верен. Однако вы не указали никакой информации о том, что произошло в этом случае. – Bakuriu
То же самое происходит с первым выходом –
Ну, 'mosel' * неправильно установлен в вашей системе. Исправьте установку. – Bakuriu