我正在创建一个 python 脚本,它使用用户给出的参数来启动可执行文件:
parser = argparse.ArgumentParser()
parser.add_argument('-c', '--stringC', dest="stringC", help="stringC", type=str)
parser.add_argument('-f', '--stringF', dest="stringF", help="stringF", type=str)
parser.add_argument('-o', '--stringO', dest="stringO", help="stringO", type=str)
parser.add_argument('-d', '--stringD', dest="stringD", help="stringD", type=str)
parser.add_argument('-s', '--stringS', dest="stringS", help="stringS", type=str)
args = parser.parse_args()
command = 'executable-location'
statement = [command, '-c', stringC, '-f', stringF, '-o', stringO, '-d', stringD, '-s', stringS]
p = subprocess.Popen(statement)
问题在于,其中一些参数对于可执行文件来说是可选的,如果未提供,程序将使用自己的默认值。因此,尽管我有时想使用默认值,但目前所有参数都已使用。
理想情况下,我只想为可执行文件提供已解析的参数。我已经尝试过了
statement = [command, args]
p = subprocess.Popen(statement2)
和
p = subprocess.Popen(args)
但它给了我以下错误:
TypeError: 'Namespace' object is not iterable
希望有人能帮助我解决这个问题。提前致谢。
如果可行的话,最简单的解决方案是将程序默认值合并到解析器中。
# For example
parser.add_argument('-f', '--stringF', dest="stringF",
help="stringF", type=str,
default="-f's default)
那么你就不必担心是否在参数列表中使用args.stringF
。
否则,您需要一次构建一个命令列表。
statement = [command]
if args.stringF is not None:
statement += ["-f", args.StringF]
# etc
我是一名优秀的程序员,十分优秀!