Ошибка формата подпроцесса Python

Извините, если этот вопрос немой. Я использую инструкцию python subprocess для вызова .bat-файла в Ubuntu (Natty 11.04), однако я получил сообщения об ошибках:

Traceback (most recent call last):
  File "pfam_picloud.py", line 40, in 
    a=subprocess.Popen(src2, shell=0)
  File "/usr/lib/python2.7/subprocess.py", line 672, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1213, in _execute_child
    raise child_exception

запустите этот файл python

$python pfam_picloud.py

Код Python (pfam_picloud.py)

#!/usr/bin/python
#
met="wTest.dvf"
run="run_pfam.bat"
inp="pfam_input.PFA"
import os
import stat
import shutil
import subprocess
import string
import random
# Generate a random ID for file save
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
    return ''.join(random.choice(chars) for x in range(size))
name_temp=id_generator()
cwd=os.getcwd()
src=cwd
src1=cwd+'/'+name_temp
if not os.path.exists(src1):
    os.makedirs(src1)
else:
    shutil.rmtree(src1)
    os.makedirs(src1)
##
shutil.copy(src+"/"+run,src1)
shutil.copy(src+"/"+met,src1)
shutil.copy(cwd+"/pfam_pi.exe",src1)
shutil.copy(src+"/"+inp,src1)
#
src2=src1+"/run_pfam.bat"
os.chdir(src1)
a=subprocess.Popen(src2, shell=0)
a.wait()

файл bash (run_pfam.bat)

#!/bin/sh
./pfam_pi.exe pfam_input.PFA

Я могу успешно запустить этот файл bash в Ubuntu. Так что, наверное, я что-то испортил в своем скрипте на Python. Может ли кто-нибудь дать мне несколько предложений? Спасибо за любые входы.

РЕДАКТИРОВАТЬ

файл pfam_pi.exe является исполняемым файлом Linux. Я собрал его в Ubuntu. Извините за путаницу.

Обновить

Well, I got different types of error now. 1. With #!/bin/sh, it said No such file or directory. 2. With /bin/sh, it said exec format error. 3. If I sent everything as arguments a=subprocess.Popen(['./pfam_pi.exe', 'inp', 'src1'], shell=0), it said end of line symbol error

2
nl ja de
Имеются ли inp и src1 символы конца строки?
добавлено автор Ellioh, источник
Проблема должна заключаться в параметрах, которые вы фактически передаете Popen. Я бы предпочел увидеть полную трассировку для ошибки № 3 (конец строки). Пример, который вы нам предоставили, имеет строки inp и src1 и вызов Popen. Это опечатка? И если это так, и действительно вы передаете переменные src и inp1, распечатайте их значения.
добавлено автор Ellioh, источник
pfam_pi.exe был скомпилирован в Ubuntu. Я просто позвонил .exe жаль путаницу
добавлено автор TH339, источник
@larsmans: Если я правильно вас понимаю. Я даю скрипту python, файлу bat и полному разрешению исполняемого файла Linux.
добавлено автор TH339, источник
@larsmans: это будет конечная разница между «Linux» и «windows». Но я предполагаю, что оболочка bash может преодолеть это, так как она отлично работает в терминале Ubuntu '$./Pfam_pi.exe pfam_input.PFA'
добавлено автор TH339, источник
@Ellioh: Спасибо за ваши комментарии. Я обнаружил, что после смены оболочки = 1 проблема решена.
добавлено автор TH339, источник
Что-то подсказывает, что вы пытаетесь выполнить программу Windows в Linux. Что говорит файл pfam_pi.exe ?
добавлено автор Fred Foo, источник
Является сценарием (это не BAT-файл, пожалуйста, не используйте термины Windows при работе в Linux), помеченный как исполняемый файл?
добавлено автор Fred Foo, источник

2 ответы

Since feature requests to mark a comment as an answer remain declined, I copy the above solution here.

@Ellioh: Спасибо за ваши комментарии. Я обнаружил, что после смены оболочки = 1 проблема решена. - tao.hong

1
добавлено
Должен ли я принять это как ответ?
добавлено автор TH339, источник
Я принял это как ответ. Спасибо.
добавлено автор TH339, источник
Это было бы полезно, так что кто-то, кто ищет решение, может легко идентифицировать его. Или вы можете отправить свое решение в качестве другого ответа, чтобы вы могли получить для него очки репутации; Затем я мог (проголосовать) удалить мой скопированный ответ.
добавлено автор Armali, источник

Попробуйте запустить wine (вы должны установить его) и передать ему pfam_pi.exe в качестве параметра. Возможно, pfam_pi.exe не является исполняемым Linux. :-) Конечно, исполняемые расширения файлов не имеют смысла в Linux, но, вероятно, это действительно программа для Windows, иначе я вряд ли могу представить ее с именем pfam_pi.exe .

Однако, если это исполняемый файл Linux, обратите внимание, что subprocess.Popen принимает список аргументов (первым элементом является сама программа), а не командной строки:

>>> import shlex, subprocess
>>> command_line = raw_input()
/bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
>>> args = shlex.split(command_line)
>>> print args
['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
>>> p = subprocess.Popen(args) # Success!
0
добавлено
Да я вижу. Возможно, вы пытаетесь создать конфигурацию, которая может быть запущена с тем же файлом .bat как на Linux, так и на Windows ...
добавлено автор Ellioh, источник
Если в начале он имеет исполняемый флаг и #!/Bin/sh, он должен работать. Но вы также можете попробовать запустить/bin/sh явно, по крайней мере, чтобы найти проблему.
добавлено автор Ellioh, источник
Спасибо за ответ. Собственно, я скомпилировал pfam_pi.exe на Ubuntu. Таким образом, это исполняемый файл Linux.
добавлено автор TH339, источник
Основываясь на вашем примере кода, означает ли это, что подпроцесс не может запускать файл .bat ? Я тестировал свой подход в Window, который отлично работает ...
добавлено автор TH339, источник
Спасибо за предложения. Я попробовал ваш подход, но получил разные сообщения об ошибках. Подробности см. В моих обновлениях.
добавлено автор TH339, источник
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

RU.UBUNTU — сообщество пользователей Ubuntu
RU.UBUNTU — сообщество пользователей Ubuntu
1 681 участник(ов)

Сообщество пользователей Ubuntu Правила: https://telegra.ph/Pravila-soobshchestva-polzovatelej-ru-ubuntu-01-05 Список интересных групп и каналов: https://github.com/goq/telegram-list

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community

pro.bash
pro.bash
123 участник(ов)

All about Nix shells, signals, processes and development in general.