我正在使用pexpect连接到运行QNX的远程计算机,上传exectuable,运行可执行文件,然后将结果返回到我的本地计算机。
我的问题是这样:命令执行得很好,但是我丢失了所有记录的结果,因为一旦我执行命令来运行我的应用程序,该过程就会返回给我(让我们调用它./application),一个C ++可执行文件。我需要做的是让进程等到命令完全运行完毕后才继续运行。
我尝试过利用proc.wait()无济于事,我最好的猜测是因为proc是SSH会话,而不是运行./application启动的进程。我已经尝试了proc.expect(" bash-username $")和类似的,只是发现应用程序立即返回。
代码相当简单明了,但并不像我希望的那样完全没有预期。以下是我如何进行操作的示例:
var printerList = PrinterSettings.InstalledPrinters.Cast<string>().ToList();
bool printerFound = printerList.Any(p => p == printerName);
if (printerFound)
{
//Do print stuff
}
else
{
//throw exception or send message
}
所以基本上每次运行时,它会在函数执行命令后立即继续执行代码的下一部分,似乎并不关心proc.expect。我错误地使用了这个吗?如何使进程等待命令执行完毕,而不仅仅是发送行并立即返回?
答案 0 :(得分:0)
我找到了解决自己问题的方法,利用子进程模块而不是pexpect。
解决方法是使用命令变量为SSH调用subprocess.Popen,如下所示:
command_as_string = '/home/user/applicationExecutable'
ssh = subprocess.Popen(['ssh', '-t', 'username@hostname',
command_as_string'],
stderr=subprocess.PIPE,
stdout=subprocess.PIPE,
shell=False,
universal_newlines=True,
bufsize=0
)
它会等到命令解析后再断开连接,并按预期继续处理剩余的Python文件。