2013-01-18 30 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