【发布时间】:2016-08-19 19:37:10
【问题描述】:
这适用于 /bin/bash 命令行……
$ /usr/bin/kafka-console-producer --topic AsIs-CalculatedMeasure --broker-list wrlmr4:9092 < /tmp/dataFile
'['0 -eq 0']'
当我调用 python 的子进程时,它会阻塞我的参数,我更改了 arg 顺序,它总是会导致第一个“-arg”阻塞
kafkaProducer='/usr/bin/kafka-console-producer'
cmdLineArgs = []
cmdLineArgs.append(kafkaProducer)
cmdLineArgs.append("""--broker-list wrlmr4:9092""")
cmdLineArgs.append("""--topic %s""" % ('AsIs-CalculatedMeasure'))
print 'Calling subprocess(%s)'%(cmdLineArgs)
cmd = subprocess.Popen(cmdLineArgs, stdin=subprocess.PIPE)
# now write the input file to stdin ...
cmd.stdin.write(payload)
Calling subprocess(['/usr/bin/kafka-console-producer', '--broker-list wrlmr4:9092', '--topic AsIs-CalculatedMeasure'])
Stderr:代理列表 wrlmr4:9092 不是一个公认的选项
subprocess 似乎正在吃“--broker-list”中的“--”。我已经切换了 arg 顺序,它给出了同样的错误“--”被吃掉了,我也尝试过“--”到 no有用。
【问题讨论】:
-
使用
shlex.split()分割和引用命令行参数,不要手动操作。如果不仔细查看您的代码,我敢打赌这就是您的问题所在。 -
--broker-list和--topic选项可能在逻辑上连接到它们的值,但选项和值仍然应该是单独的命令行参数。
标签: python bash python-2.7 subprocess