2017-01-17 7 views
1

Я пытаюсь выполнить следующий локон заявление из сценария Python для того, чтобы загрузить файл, используя слабину API:Выполнения локон заявления с использованием подпроцесса в сценарии Python не работает

curl -F [email protected] -F channels=#general -F token=xxxx-xxxxxxxxx-xxxx https://slack.com/api/files.upload

Когда я бегу выше команды с моего терминала, он успешно загружает файл с правильным файлом в общий канал. Однако, когда я пытаюсь запустить его из моего сценария Python, используя код, приведенный ниже, я получаю сообщение об ошибке: TraceBack

bash_cmd = 'curl -F [email protected] -F channels=#general -F token=xxxx-xxxxxxxxx-xxxx https://slack.com/api/files.upload' 
process = subprocess.Popen(bash_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
stout, sterr = process.communicate() 

Ошибка:

Traceback (most recent call last): 
File "trendbot.py", line 75, in <module> 
handle_command(command, channel) 
File "trendbot.py", line 47, in handle_command 
process = subprocess.Popen(bash_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
File "/Users/melanie/anaconda/lib/python2.7/subprocess.py", line 711, in __init__ 
errread, errwrite) 
File "/Users/melanie/anaconda/lib/python2.7/subprocess.py", line 1343, in _execute_child 
raise child_exception 
OSError: [Errno 2] No such file or directory 

Если я напечатать bash_cmd и вставить его в моем Окно терминала, оно также успешно работает. Вся помощь была оценена.

ответ

0

Отвечая на мой собственный вопрос:

Я должен установить shell=True, потому что мой bash_cmd является одной строкой. Сейчас я запускаю следующее и работает:

bash_cmd = 'curl -F [email protected] -F channels=#general -F token=xxxx-xxxxxxxxx-xxxx https://slack.com/api/files.upload'.format(file_name, channel) 
process = subprocess.Popen(bash_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
stout, sterr = process.communicate()