Cameron Sparr уже дал общего назначения ответа.
Но в вашем конкретном случае вам, вероятно, это не понадобится.
pexpect.spawn
принимает строку команд и аргументов или командную строку и список отдельных строк аргументов. И то же самое верно для большинства аналогичных методов в других библиотеках (например, в стандартной библиотеке subprocess
).
Итак, вам нужно только, чтобы каждый аргумент в строку, как это:
pexpect.spawn('ssh', ['-t', '[email protected]', 'sudo nohup bash -c "./tcp_sender > /dev/null 2>&1 &"'])
На самом деле, документация конкретно предполагает, что это, именно по этой причине:
Вторая форма of spawn (где вы передаете список аргументов) полезно в ситуациях, когда вы хотите вызвать команду и передать ей свой собственный список аргументов . Это может сделать синтаксис более понятным.
Конечно, в вашем случае, вы на самом деле нерест команду со списком аргументов ... один из которых сам по себе является командой, чтобы метать икру и список аргументов (sudo
), и так далее несколько шагов вниз линия (nohup
, bash
и, наконец, tcp_sender
), и, очевидно, pexpect
может помочь только с первого из этих шагов. К счастью, в этом случае это все, что вам нужно.
Если вы сделать нужно больше, есть некоторые библиотеки там, которые могут генерировать POSIX стиля строки в кавычках из списка аргументов (в основном реверсе shlex
), но несколько раз я нужен один, то один Я обнаружил, что оказался ошибкой, и я в конечном итоге переписал его сам ... На самом деле это не так сложно (в основном, просто избегайте всего, а затем цитируйте все аргументы). Но, надеюсь, вам никогда не придется это делать.
triple '' '?, почему не' ''''?? – misteryes
либо один должен работать, я просто привык видеть двойники, используемые для тройных котировок –
@misteryes, они оба работают, но с использованием трех '' 's гораздо более распространенный (или идиоматический) в существующем коде python. Это, конечно, не заставляет вас использовать это. :) –