Py2 — Запустите скрипт Bash с аргументами — Сохраните выходные данные в файле в другом каталоге

#python #bash #python-2.7

#питон #удар #python-2.7

Вопрос:

Мой код:

 for host in hostlist_split:  path = currentDIR   "/"   scriptRESULTS   runtimeSCRIPT  if os.path.exists(path):  print 'Executing Script...'  subprocess.check_call(['path', 'username', 'password'])  print(stdout)  sitesProcessed  = 1  

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

Я назову файл в честь хоста, на котором был запущен скрипт, и сохраню его в каталоге, названном в честь индекса.

Проблема в том, что я получаю сообщение no such file or directory при выполнении этого кода.

  1. Я проверил, что хост считывается правильно и хранится в списке в виде строки.
  2. Я проверил, что путь к индексу, имя пользователя и пароль хранятся и предоставляются, как и ожидалось.

Но при использовании check_call функции скрипт не запускается, и вывод stdout не печатается.

Ошибка:

 Traceback (most recent call last):  File "./pywrapper.py", line 136, in lt;modulegt;  subprocess.check_call(['path', 'username', 'password'])  File "/usr/lib64/python2.7/subprocess.py", line 537, in check_call  retcode = call(*popenargs, **kwargs)  File "/usr/lib64/python2.7/subprocess.py", line 524, in call  return Popen(*popenargs, **kwargs).wait()  File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__  errread, errwrite)  File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child  raise child_exception OSError: [Errno 2] No such file or directory  

Комментарии:

1. Просто быстрая проверка: в вашем первом примере есть переменная с именем path , но ваша обратная трассировка показывает литеральную строку 'path' . Это совсем разные вещи.

2. Ха-ха, вы правы, я указал путь в виде строки вместо переменной. Я исправил это, но теперь я получаю [Ошибка 13] Отказано в разрешении lol — И, чтобы быть ясным, я запустил chmod 777 * и dos2unix

3. У вас есть правильная строка в строке 1, например #! /bin/bash , чтобы указать ядру, что выполнять?

4. Да, я знаю. Здесь проблема была не в этом.

Ответ №1:

Мой сценарий не расширял переменные, он просто читал их как строки. Я только что переключился с BASH, поэтому мне потребовалось некоторое время, чтобы понять, как объединить строки и переменные в одну строку без добавления пробелов.

Это то, чем я сейчас занимаюсь..

 for host in hostlist_split:  path = currentDIR   '/'   scriptRESULTS   runtimeSCRIPT   if os.path.exists(path):  print 'Executing Script...'  sshARGS = ('{}/{} {} {} {} gt; {}/{}'.format(currentDIR, runtimeSCRIPT, host, username, password, path, host) )   SSH = subprocess.Popen(sshARGS, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)  out, err = SSH.communicate()  SSH.wait()  sitesProcessed  = 1