- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个 python 脚本,将一个字符串发送到一个程序并将其放在后台。在命令行上,我可以复制并粘贴以下代码并让它成功执行我希望 python 程序执行的操作:
printf "f\nil\ncs\n1.e-8 100.0 1.e-8\nn\n0.002\nb\n0.05\nz\n2.e-7\nx4\n5.e-7\n\n\nfort.13\nn\nn\n\n" | vpfit95
其中:vpfit95
是我的 PATH 中可执行程序的别名。
我尝试过的一些排列组合(一次尝试一个):
import subprocess
vpfitExecutable = 'vpfit95'
String1=r'f\nil\ncs\n1.e-8 100.0 1.e-8\nn\n0.002\nb\n0.05\nz\n2.e-7\nx4\n5.e-7\n\n\nfort.13\nn\nn\n\n'
String2=r"f\nil\ncs\n1.e-8 100.0 1.e-8\nn\n0.002\nb\n0.05\nz\n2.e-7\nx4\n5.e-7\n\n\nfort.13\nn\nn\n\n"
String3="f\nil\ncs\n1.e-8 100.0 1.e-8\nn\n0.002\nb\n0.05\nz\n2.e-7\nx4\n5.e-7\n\n\nfort.13\nn\nn\n\n"
cmd1 = "printf \"" + String1 + "\""
cmd2 = "printf \"" + String1 + "\" | " + vpfitExecutable
cmd3 = "printf \"" + String2 + "\""
cmd4 = "printf \"" + String3 + "\""
print cmd2
p1 = subprocess.Popen([vpfitExecutable, cmd1])
p2 = subprocess.Popen([cmd2])
p3 = subprocess.Popen([vpfitExecutable, cmd3])
p4 = subprocess.Popen([vpfitExecutable, cmd4])
p4 = subprocess.Popen([vpfitExecutable, String1])
p5 = subprocess.Popen([vpfitExecutable, String2])
p6 = subprocess.Popen([vpfitExecutable, String3])
# check
p7 = subprocess.Popen([vpfitExecutable]) # works.
全部失败(p7 除外)。有些失败并显示“Fortran 运行时错误:文件结尾”(来自 vpfit 程序)。其他人则失败并回溯到子进程库和“OSError:[Errno 2] 没有这样的文件或目录”。
一些检查:当我打印 cmd2
并将其复制并粘贴到终端时,它运行良好。当我运行 p7
时,它会按预期正确地开始运行程序,只是没有输入字符串。我显然在这里遗漏了一些基本的东西,我只是想不通是什么。任何帮助表示赞赏!
最佳答案
是的,您遗漏了一些基本的东西——管道由 shell 处理。要使用子进程执行您想要的操作,您应该将 vpfit95
作为子进程运行,然后与它进行通信
。请参阅文档第 17.1.4.2 节,replacing a shell pipeline .
proc = subprocess.Popen([vpfitExecutable], stdin=subprocess.PIPE)
proc.communicate(input='your string')
如果您需要检查 vpfit 的标准输出和标准错误,请从 communicate
的输出元组中获取句柄。
一个肮脏的选择是使用 shell=True
运行你的命令,它在一个 shell 中产生它然后你可以在你的命令中使用一个管道,但是“切断中间人”更干净"并直接与子流程交互。
关于Python 子进程 Popen 将字符串传递给程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11517597/
需要帮助将这些给定的数字打印成星号,但我是编程新手;我该怎么做? #include int main(void) { int a[5]={20,1,5,15,12}; int i=0
使用 Delphi XE 2 我试图确定缩放方向以将缩放效果应用于图像(TImage),但没有找到执行此操作的函数,并且图像的 OnGesture 事件中的 EventInfo 属性没有此信息. 我见
我不知道制服在内存中是如何表示的。 制服似乎会占用宝贵的寄存器空间,但它们最终会传入/通过/传出到全局内存中,对吗? 制服不用时情况会发生变化吗?编译器可以将它们优化掉吗?--在这种情况下,我已经将无
我正在尝试在名为“timeclock”的模型上记录“time_in”和“time_out”记录。这是我想做但无法开始工作的事情! 检查最后一个时钟条目,看看它是否同时填充了“time_in”和“tim
我想听听您如何解决这种编程任务!?每种类型(OPER = 1 类型)对应一种特定的信息。 这只是大约 10 个具有相同结构的规范之一。首选创建这些“转换器”(协议(protocol))的通用方法。 最
我正在使用 Rest API(NodeJS、Express)和 PostgreSQL 制作 React-Native 应用。 在我的本地机器上托管时一切正常。当 API 托管在我的机器上并且 Post
我是一名优秀的程序员,十分优秀!