#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
при выполнении этого кода.
- Я проверил, что хост считывается правильно и хранится в списке в виде строки.
- Я проверил, что путь к индексу, имя пользователя и пароль хранятся и предоставляются, как и ожидалось.
Но при использовании 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