2015-05-12 1 views
2

Я хотел бы запустить очень простую команду hive из моего сценария python. Я пытаюсь использовать улей -e, но я получаю сообщение об ошибкевызов hive -e из скрипта python

def hive(): 
    cmd = "hive -e \"msck repair table dashboard_report\"" 
    print(cmd) 
    check_call(cmd) 

Это ошибка я получаю

hive -e "msck repair table dashboard_report" 
Traceback (most recent call last): 
File "/home/yosi/work/source/slg/tiger/src/main/resources/python/tiger.py", line 59, in <module> 
hive() 
File "/home/yosi/work/source/slg/tiger/src/main/resources/python/tiger.py", line 57, in hive 
check_call(cmd) 
File "/usr/lib/python2.7/subprocess.py", line 535, in check_call 
retcode = call(*popenargs, **kwargs) 
File "/usr/lib/python2.7/subprocess.py", line 522, in call 
return Popen(*popenargs, **kwargs).wait() 
File "/usr/lib/python2.7/subprocess.py", line 710, in __init__ 
errread, errwrite) 
File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child 
raise child_exception 
OSError: [Errno 2] No such file or directory 
+0

Что именно делает 'check_call'? – hyades

+0

создать новый процесс и проверить его код возврата – yosi

+0

Можете ли вы разместить код? – hyades

ответ

1

Ваша функция check_call звонит subprocess.Popen. Если вы хотите передать аргументы этой функции, вам необходимо передать их в список.

Возможно:

cmd = ["hive", "-e", "\"msck repair table dashboard_report\""] 
check_call(cmd) 

будет работать. Возможно, потребуется некоторое рефакторинг в стеке вызовов, чтобы принять список вместо строки.

+0

Отлично, он работает! – yosi