Python将CMD调用添加到ArgeParse

时间:2018-02-01 21:11:53

标签: python linux bash awk cmd

我正在尝试在我的python代码中的帮助部分添加一个选项。当用户使用-h运行cmd调用时,将提示以下内容。

如果他们不知道什么节目可用,我希望选择-sl选项,它将运行cmd并在同一终端输出列表。由于我缺乏经验和涉及awk的cmd,引用也证明是一个问题。

未触发的命令行调用如下: jobsinfo --allshow | awk -F“[,] +”'/ jobs / {print $(NF-1)}'

showlist = "jobsinfo --allshow | awk -F " + "[, ]+" + "'/jobs/{print     $(NF-1)}'"

# Help section
parser = argparse.ArgumentParser(description="Check the render queue for a time period")
parser.add_argument("-l", "--location", default=site, help="The location you want to check. ""#Examples: london, denver, montreal...")
parser.add_argument("-p", "--project", default="New", help="The project you want to check. The Default is set to new. "
                    "#Examples: Please see SHOW list here: http://dnet.dneg.com/display/COMMS/SHOW+INFORMATION")
# parser.add_argument("-sl", "--showlist", action=showlist, help="List the Shows currently on Servers.")
parser.add_argument("-d", "--days", type=int,  default=14, help="The number of days you wish to go back. The default is set to 14 days. "
                    "#Examples: -d 3, -d 9, -d 14")
args = parser.parse_args()

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

这里有一些想法给你。由于我没有jobsinfo程序,因此我使用以下命令来运行

ls -l | awk 'NR < 10 { print " quoting no problem " $NF }' 

注意,这不是真的推荐,但很容易做到。见http://mywiki.wooledge.org/ParsingLs

无论如何,对于你给出的代码,我只需做一些改动。 showlist选项变为

parser.add_argument("-s", "--showlist",
                    action='store_const', const=True, 
                    help="List the Shows currently on Servers.")

这意味着如果您使用-s选项(./argparse_help.py -s),则可以执行以下操作:

args = parser.parse_args()

if args.showlist:
    print "showlist is True"
else:
    print "showlist is False"

如果需要,请参阅Python.org中的API referencetutorial

要实际运行该命令,您可能需要subprocess模块。作为一个例子,我使用Pythons原始的多行字符串(r""" triple quoted strings""")来避免引用问题(当然除了shell之外):

import subprocess
test_run = r"""   ls -l | 
            awk 'BEGIN { 
                    print "'\'' quotes are like they would be in the shell '\''"
                 }
                 NR < 10 { 
                    print  $NF 
                 }'   

           """
subprocess.call(test_run, shell=True)

跑步时,这会给出

~$> ./argparse_help.py -s
' quotes are like they would be in the shell '
117984
anvil_group.sh
a.out
argparse_help.py
a.text
awk
bin
Library
confused_out

这主要可以在Python中完成,这避免了必须使用shell=True

import subprocess
print "' quotes are like in python '"
for line in subprocess.check_output(['ls', '-l']).splitlines()[:9]:
    print line.split()[-1]

并输出:

~$> ./argparse_help.py -s
' quotes are like in python '
117984
anvil_group.sh
a.out
argparse_help.py
a.text
awk
bin
Library
confused_out

希望能让你再次前行。