这适用于/ bin / bash命令行...
$ /usr/bin/kafka-console-producer --topic AsIs-CalculatedMeasure --broker-list wrlmr4:9092 < /tmp/dataFile
&#39; [&#39; 0 -eq 0&#39;]&#39;
当我调用python的子进程时,它会扼杀我的参数,我已经改变了arg顺序,它总是会导致第一个&#34; -arg&#34;
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:broker-list wrlmr4:9092不是公认的选项
subprocess似乎正在吃&#34; - &#34;来自&#34; - 经纪人列表&#34; ..我已经切换了arg命令并且它给出了相同的错误&#34; - &#34;吃了,我也试过了#34; - &#34;无济于事。
答案 0 :(得分:2)
你要传递一个包含所有参数的大字符串,用引号保护空格,如下所示:
subprocess.Popen('/usr/bin/kafka-console-producer --broker-list wrlmr4:9092 --topic AsIs-CalculatedMeasure', stdin=subprocess.PIPE)
或者您正确地拆分命令行。 您将两个参数作为一个参数传递,子进程在它们周围添加引号以保护它们,并且您调用的程序无法解析参数。
执行getopt或其他任何操作时,您的被叫程序应该是:
--broker-list
作为参数n
wrlmr4:9092
作为参数n + 1
但是子进程保护了参数,因为它有空格,所以你的被调用程序收到了
--broker-list wrlmr4:9092
作为参数n
它根本不喜欢它。)
修复你的cmdLineArgs准备工作
cmdLineArgs.extend(["--broker-list","wrlmr4:9092"])
cmdLineArgs.extend(["--topic","AsIs-CalculatedMeasure"])
我通常建议使用第二种方法,主要是如果参数来自调用者,并且可能包含空格。 subprocesses.Popen
会为您报价。