python - 如何将字符串传递给shell脚本
问题描述
我的任务是将我的 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)
我尝试过的另一种方法是here。这次它只打印第一个参数并且它崩溃并出现错误代码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)
外壳脚本
#!/usr/bin/env bash
./Solver/streamer $1 $2
我究竟做错了什么?
解决方案
这是您的 shell 脚本中的错误,而不是您的 Python 中的错误。
引用您的论点以防止它们被分词,然后将每个单词单独处理为一个全局:
#!/usr/bin/env bash
./Solver/streamer "$1" "$2"
推荐阅读
- sass - 在 Github 页面上托管的 Jekyll 站点上找不到 SCSS 文件导入
- amazon-web-services - AWS Api Gateway 开发人员门户 - 文档
- c# - 世界中心的死亡动画生成(统一)
- iframe - Adsense 重定向到 safari 中的广告 iframe url
- python - Python 语音识别:recognize_google with UnknownValueError for Microphone
- javascript - Vue 和 api 背景变化
- c - 没有内存泄漏,但使用 malloc 和文件指针时 valgrind 会出现令人困惑的错误
- python - 尝试使用 pydicom 裁剪图像并保存 dicom,
- delphi - 将指针转换为 TBytes
- swift - 绘图时如何获取苹果铅笔的值-pencilkit