【问题标题】:Spawning a process with inherited python optparse options使用继承的 python optparse 选项生成一个进程
【发布时间】:2013-01-02 18:37:23
【问题描述】:

我有一堆使用 optparse 包的 python 脚本。我想给他们一个“remote_run”选项,我想使用如下:

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

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

最好的方法是什么?我通过编写自定义的 cmd 生成函数一次性完成了几个脚本,但是每当我向这些脚本添加新选项时,我都必须使这些函数保持最新,这并不理想。

【问题讨论】:

    标签: python arguments command-line-arguments optparse


    【解决方案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', '%s@%s' % (user, server), command]))
       else:
          main()
    

    【讨论】:

    • 太棒了,这很干净和简单。我一直专注于从 optparse 对象构造命令。这种方式显然更胜一筹。谢谢!
    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2010-09-28
    相关资源
    最近更新 更多