Я использую subprocess.Popen для выполнения команды OS. Вот что я пытаюсь подражать в моем коде:Проблема с subprocess.Popen и выполнение команды ssh
ssh -T myhost < /path/to/some/file
Он отлично работает так:
def runWorkerCode(filer, filename):
command = "/usr/bin/ssh -T " + filer + " < /devel/myscript"
try:
p = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
out, _ = p.communicate()
except Exception:
print "Error: %s" % Exception
sys.exit(1)
return out.rstrip().split('\n')
Но следующие вызовы на Popen не работают:
p = subprocess.Popen(["/usr/bin/ssh", "-T", filer, "<", "/devel/myscript"], stdout=subprocess.PIPE, shell=True)
p = subprocess.Popen(["/usr/bin/ssh -T", filer, "< /devel/myscript"], stdout=subprocess.PIPE, shell=True)
I попробовал несколько других комбинаций, но только метод, с которым я могу работать, - это определить командную переменную и предоставить ее только Popen()
. Я также пробовал shell=False
.
Первый метод работает, но последний подход кажется мне «чище».
Почему нет Popen
Позвольте мне указать аргументы в списке?
В какой ОС вы находитесь? – wnnmaw
Это будет работать на хостах Linux и Solaris (как sparc, так и x86). – BenH