我的任务是将python代码与C ++代码(称为streamer
)连接起来,然后将结果返回给python脚本。我必须将两个参数发送到C ++代码。第一个是整数(在这里没有问题),但是第二个是一个很长的字符串,您可以在这里看到。
8 0
37 0
81 0
95 0
116 0
133 0
145 0
184 0
207 0
223 0
258 0
277 0
在C ++代码中,我只是使用此代码打印两个参数来查看我传递的内容:
std::cout << "ARGUMENT 1: " << argv[1] <<'\n';
std::cout << "ARGUMENT 2: " << argv[2] <<'\n';
我尝试了几种在这里找到的方法,但是没有任何效果。当我尝试此python代码时,它不会将第二个参数(长字符串)视为一个字符串,而是多个参数。
p = subprocess.Popen([r'./Solver/solver.sh', str(3), long_string], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
solver_result, err = p.communicate()
print(solver_result)
print(err)
我尝试过的另一种方法是在这里。这次,它仅打印第一个参数,并且由于错误代码139
而崩溃,这很可能是因为没有argv[2]
p = subprocess.run([r'./Solver/solver.sh', str(3)], stdout=PIPE, input=long_string, encoding='ascii')
print(p.returncode)
print(p.stdout)
Shell脚本
#!/usr/bin/env bash
./Solver/streamer $1 $2
我在做什么错?
答案 0 :(得分:2)
这是您的Shell脚本中的错误,而不是Python中的错误。
引用您的参数以防止它们被单词分割,然后将每个单词分别处理为一个整体:
#!/usr/bin/env bash
./Solver/streamer "$1" "$2"