Вызвать подпроцесс

1

Я должен вызвать исполняемый файл в Ubuntu... Просто научился делать эту работу, используя subprocess.Popen в Windows. Теперь мне нужно повторить этот шаг в Ubuntu.

Я использовал следующую команду Python:

a=subprocess.Popen("filename.exe",shell=0)

Возврат

Traceback (most recent call last):
  File "/untitled0.py", line 29, in <module>
    a=subprocess.Popen("filename.exe",shell=0)
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
    raise child_exception
OSError: [Errno 8] Exec format error

Если я изменяю shell=1, жалоб нет, но выходные файлы не генерируются.

Я проверил тип этого файла, используя file filename.exe Он вернул:

filename.exe: ELF 64-разрядный исполняемый файл LSB, x86-64, версия 1 (SYSV), динамически связанный (использует разделяемые библиотеки), для GNU/Linux 2.6.9, не разделенный

Так можно ли это назвать, используя subprocess.Popen в Ubuntu?

  • 1
    Вы пытаетесь запустить 64-битный двоичный файл на 32-битном хосте? Не могли бы вы показать вывод uname -a ?
  • 0
    Кажется, у меня Ubuntu 32-битная, что может вызвать у меня проблемы. Могу ли я узнать, что такое uname -a?
Показать ещё 3 комментария
Теги:

1 ответ

3
Лучший ответ

Быстрое чтение документов python, похоже, что вы поступаете правильно, так что. Как насчет попытки сказать say/bin/false, который должен быть известным рабочим exe в вашей системе. Если это сработает, то ваш exe скорее всего ошибочен (возможно, 64 бит на 32-битной системе)

  • 0
    Он не жаловался на кормление / bin / false, поэтому кажется, что мой exe неверен. Кроме того, в чем разница между shell = 0 и shell = 1. Спасибо
  • 0
    Если shell = 1, вы не выполняете файл, вы передаете строку в вашу оболочку для оценки (.eg "ls -la ~ /")

Ещё вопросы

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