python 当使用subprocess.run()通过ssh在远程服务器上启动进程时,subprocess.run()不会等待进程完成

nle07wnf  于 2023-04-19  发布在  Python
关注(0)|答案(1)|浏览(188)

我需要在远程服务器上运行python脚本中的一个命令。(可能需要几分钟),并写入一个新的文件与翻译translated_file .接下来,我需要复制翻译文件到文件夹translations .然而,subprocess.run()不等待命令完成,当它试图复制,这是一个错误,因为该文件不存在。
这是一个脚本:

subprocess.run(["ssh", "remote-server", "-f", "python", "-m", "sockeye.translate", "--models", "translation-model", "--input", "input_file", "--output", "translated_file"])

subprocess.run(["ssh", "remote-server", "-f", "cp", "translated_file", "translations"])

我认为这与ssh有关,因为当我尝试直接在远程服务器上执行相同的操作时,subprocess.run()会等待转换完成。在远程服务器上,我使用了相同的命令,只是删除了ssh远程服务器,如下所示:

subprocess.run(["python", "-m", "sockeye.translate", "--models", "translaiton-model", "--input", "input_file", "--output", "translated_file"])

subprocess.run(["cp", "translated_file", "translations"])

如何让subprocess.run()等待?或者有更好的方法在远程运行命令吗?

f0brbegy

f0brbegy1#

您正在使用-f选项运行ssh。请尝试删除-f选项。该选项会导致ssh在身份验证后开始在后台运行。您不希望这样做,因为您希望等待每个ssh调用完成。
请参阅此处的选项说明:
我操

**在命令执行前请求ssh转到后台。**如果ssh要询问密码或密码短语,但用户希望它在后台,这很有用。这意味着-n。在远程站点启动X11程序的推荐方法是使用ssh -f host xterm。

相关问题