在 Tar SSH 管道 shell 调用后恢复 Python?
Resuming Python after Tar SSH Pipe shell call?
我正在将自定义地图(例如 google 地图)从我的家庭服务器传输到云服务器。我传输它们的最快方法似乎是 tar ssh 管道方法。
tar czpf - ./tiles | ssh -i myprivate.key user@ssh.example.com "tar xzpf - -C /www/tiles/"
这在命令行上效果很好,但现在我想要我的 python 创建磁贴的脚本自动推送它们。我试过:
os.system('tar czpf - ./tiles | ssh -i myprivate.key user@ssh.example.com "tar xzpf - -C /www/tiles/"')
以及 subrprocess.Popen 变体,它们都将我所有的地图图块复制到远程服务器,但系统 shell 不会关闭并且 return 控制权python 脚本等脚本挂起且未完成。
我猜想管道或 tar 重定向到 STDOUT 时发生了某些事情,导致 os.system 无法完成。我在想,也许负责解压缩的远程 tar 正在等待更多通过管道的 STDIN,但没有别的东西来了吗?我真的不太了解这个,感谢你的帮助。
我是否可以做一些不同的事情来完成脚本的其余部分,同时仍然能够实现 tar ssh 管道传输方法的好处?
谢谢!
os.system() 已弃用,取而代之的是 subprocess 模块。
我 运行 这是在 Python 2.7 解释器中。它成功并立即返回控制权:
import subprocess
try:
if subprocess.call(["/bin/bash", "tar_ssh.sh"]) == 0:
print "success!"
else:
print "failed! :("
except Exception as e:
print(str(e))
它调用 tar_ssh.sh 只包含您的命令(假设 public 密钥身份验证,而不是密码短语身份验证):
tar czpf - ./source_folder/ | ssh username@ip_or_hostname "tar xzpf - -C /destination_folder/"
我正在将自定义地图(例如 google 地图)从我的家庭服务器传输到云服务器。我传输它们的最快方法似乎是 tar ssh 管道方法。
tar czpf - ./tiles | ssh -i myprivate.key user@ssh.example.com "tar xzpf - -C /www/tiles/"
这在命令行上效果很好,但现在我想要我的 python 创建磁贴的脚本自动推送它们。我试过:
os.system('tar czpf - ./tiles | ssh -i myprivate.key user@ssh.example.com "tar xzpf - -C /www/tiles/"')
以及 subrprocess.Popen 变体,它们都将我所有的地图图块复制到远程服务器,但系统 shell 不会关闭并且 return 控制权python 脚本等脚本挂起且未完成。
我猜想管道或 tar 重定向到 STDOUT 时发生了某些事情,导致 os.system 无法完成。我在想,也许负责解压缩的远程 tar 正在等待更多通过管道的 STDIN,但没有别的东西来了吗?我真的不太了解这个,感谢你的帮助。
我是否可以做一些不同的事情来完成脚本的其余部分,同时仍然能够实现 tar ssh 管道传输方法的好处?
谢谢!
os.system() 已弃用,取而代之的是 subprocess 模块。
我 运行 这是在 Python 2.7 解释器中。它成功并立即返回控制权:
import subprocess
try:
if subprocess.call(["/bin/bash", "tar_ssh.sh"]) == 0:
print "success!"
else:
print "failed! :("
except Exception as e:
print(str(e))
它调用 tar_ssh.sh 只包含您的命令(假设 public 密钥身份验证,而不是密码短语身份验证):
tar czpf - ./source_folder/ | ssh username@ip_or_hostname "tar xzpf - -C /destination_folder/"