2013-01-18 31 views
2

我有一堆使用optparse包的python脚本。我想给他们全部“remote_run”选项,我想使用如下,其中:使用继承的python optparse选项产生一个进程

if options.remote_run: 
    cmd = create_cmd(options) 
    os.system('ssh %[email protected]%s "%s"' % (user, server, cmd)) 
    sys.exit(0) 

功能create_cmd()应该创建一个命令就相当于用于启动该进程的命令,除了没有设置remote_run选项。这个想法是让脚本将自己外包给不同的服务器,以保留当前服务器的资源。

这样做的最好方法是什么?我通过编写自定义的cmd生成函数为一些脚本做了一次性的工作,但是当我向这些脚本添加新选项时,我必须保持这些功能是最新的,这并不理想。

回答

1

基于Is it possible to set the python -O (optimize) flag within a script?

#!/usr/bin/env python 
import socket 
import subprocess 
import sys 
from pipes import quote 

def main(): 
    print(socket.gethostname()) 
    print(sys.argv) 

if __name__=="__main__": 
    if '--remote-run' in sys.argv: 
     sys.argv.remove('--remote-run') 
     command = ' '.join(map(quote, ['python'] + sys.argv)) 
     sys.exit(subprocess.call(['ssh', '%[email protected]%s' % (user, server), command])) 
    else: 
     main() 
+0

大,这是干净和简单。我一直非常重视从optparse对象构建命令。这种方式显然是优越的。谢谢! – dshin