【问题标题】:Defining the command line arguments of a linux command in python在 python 中定义 linux 命令的命令行参数
【发布时间】:2013-07-04 21:36:46
【问题描述】:

首先,抱歉标题不准确(如果有人有更好的建议如何命名此线程,请随时告诉我),我的问题一点也不复杂。

我用 Python 写了一个小程序,我在其中执行了一个命令行:

import os

os.system("sudo rtcwake -m off -s 100")

你们中的一些人可能知道,它只是一个 rtcwake 命令,用于关闭计算机并再次打开(100 秒后)。

我想以这样一种方式实现这个程序,当执行时(例如从控制台),用户可以输入计算机应该关闭的秒数,而不是预先确定 100 秒。

这样做的正确方法是什么?

【问题讨论】:

    标签: python linux command-line


    【解决方案1】:

    format是你的朋友:

    import os, sys 
    if len(sys.argv) == 2:
      os.system("sudo rtcwake -m off -s {}".format(sys.argv[1]))
    else: print "usage: ..."
    

    所以秒是命令行参数。或者,您可以使其具有交互性:

    import os
    secs = raw_input()
    os.system("sudo rtcwake off -s {}".format(secs))
    

    验证用户输入是否为整数:

    try:    secs = int(secs)
    except: print 'usage: '
    

    【讨论】:

    • 关于交互式变量,如果用户输入的不是数字,命令行就会遇到麻烦。你会如何检查这个?我想执行一个“如果类型(秒)是 int -> os.system(”sudo.....)否则打印'不正确,再试一次'os.system(“python nameoftheprogram.py”),但就像我一样不推荐阅读在 python 上进行类型检查...?
    • @user2013394,在raw_input之后的类型是str,即使输入是一个有效的整数。在示例中添加了可能的检查。
    【解决方案2】:

    使用ArgumentParser

    parser = argparse.ArgumentParser(description='Shutdown your computer and turns it on after x seconds.')
    parser.add_argument('delay', metavar='x', type=int,
                       help='The number of seconds the computer should be down.', default=100)
    args = parsre.parse_args()
    x = args.delay
    

    【讨论】:

      猜你喜欢
      • 2015-08-09
      • 2011-06-14
      • 2012-02-20
      • 1970-01-01
      • 2018-12-17
      • 2015-06-03
      • 2011-01-07
      • 1970-01-01
      • 2022-10-21
      相关资源
      最近更新 更多