我正在尝试在我的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()
非常感谢任何帮助。
谢谢!
答案 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 reference或tutorial。
要实际运行该命令,您可能需要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
希望能让你再次前行。