我想通过 ssh 远程运行一个 python 脚本。对于单个脚本,这将是这样的:
ssh user@machine python test.py
如果我的 Python 程序由多个文件组成,那么我就没那么幸运了。由于 Python 可以执行 zip 文件,所以我创建了一个,它在我的本地系统上完美运行:
python test.zip
通过 ssh:
ssh user@machine python < test.zip
我收到错误消息“语法错误:非 UTF-8 代码以...开头”。存档中的两个文件都以“-- 编码:utf-8 --”。
我要做什么才能让它成功?
答案1
基本问题
ssh user@machine python < test.zip
是test.zip
发送到ssh
而不是python
。
解决方案堆栈溢出 可能会有效,如果你能实现那里提到的 python 脚本(复制如下):
#!/usr/bin/python
import sys
import os
import zipfile
import StringIO
import zipimport
import time
sys.path.append('/tmp')
class SinEater(object):
def __init__(self):
tmp = str(int(time.time()*100)) + '.zip'
f = open(tmp, 'w')
f.write(sys.stdin.read(1024*64)) # 64kb limit
f.close()
try:
z = zipimport.zipimporter(tmp)
z.load_module('foo')
except:
pass
if __name__ == '__main__':
print 'herp derp'
s = SinEater()
另存为zip_parse_script.py
在远程机器上并将使用执行你的命令
test.zip | ssh user@machine python /path_to_python_script/zip_parse_script.py