Я пытаюсь выполнить команду над S SH. У меня есть код на удаленном ноутбуке (машина 1), и я хочу S SH на linux машину (машина 2), чтобы выполнить команду, которая компилирует все данные на машине 2 в csv файл.
Мой код выглядит следующим образом:
import subprocess
ipaddress = "123.45.678.90"
cmd1 = """mysql --batch -u redacted -p"redacted" -h 789.01.234.567 -D redacted -e " SELECT redacted WHERE redacted > '2020-04-13 10:39:42' AND redacted < '2020-04-13 12:46:27' AND redacted AND redacted AND redacted;" > file_name.csv"""
cmd2 = "touch test.txt"
subprocess.Popen("ssh {ip} {cmd}".format(ip=ipaddress, cmd=cmd2), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
В приведенном выше коде, когда я использую cmd2 для тестирования, я могу запустить код, а затем вручную S SH в на компьютере 2 на CLI компьютера 1 и вижу, что файл "test.txt" был создан на компьютере 2.
Однако если я использую cmd1 в приведенном выше коде, то я вручную S SH на машине 2, я не вижу файл, который я хочу создать. Я могу S SH в машину 2 и вручную скопировать / вставить содержимое cmd2, и это работает.
Может кто-нибудь помочь мне понять, почему это так? Спасибо!
Редактировать Я добавил ошибку в команду subprocess.popopen, и при использовании cmd1 сообщение print (err) выглядит так:
b"bash: -c: line 0: syntax error near unexpected token `('\nbash: -c: line 0: `mysql --batch -u redacted -predacted -h 789.01.234.567 -D redacted -e SELECT redacted WHERE redacted > '2020-04-13 10:39:42' AND redacted < '2020-04-13 12:46:27' AND redacted AND redacted AND redacted;'\n"
It похоже на распечатку ошибки, команда была удалена из всех двойных кавычек, а также окончательная строка " > file_name.csv
, которая сообщает команде, где сохранить файл. Ниже приведено сравнение исходной команды, которая должна быть отправлена, и того, что сообщило сообщение об ошибке:
origi: mysql --batch -u redacted -p"redacted" -h 789.01.234.567 -D redacted -e " SELECT redacted WHERE redacted > '2020-04-13 10:39:42' AND redacted < '2020-04-13 12:46:27' AND redacted AND redacted AND redacted;" > file_name.csv
error: mysql --batch -u redacted -predacted -h 789.01.234.567 -D redacted -e SELECT redacted WHERE redacted > '2020-04-13 10:39:42' AND redacted < '2020-04-13 12:46:27' AND redacted AND redacted AND redacted;'\n"
Как убедиться, что моя исходная команда передается в функцию subprocess.Popen ? Похоже, что все двойные кавычки были удалены. Если я делаю простой вывод (cmd1), он выводит мою команду как обычно. Спасибо