子流程的类似Shell的语法.Popen#过载>,<|

你好, 我使用python大量将不同的程序进行近点. 自从子进程出现以来,这样做很容易,但是 真的很想能够使用简洁的壳语法; >,<,| 真的不应该在课堂上包裹太难,但是到目前为止 没有成功地做到这一点,因为我面临一些麻烦 我不知道如何克服的操作员优先. 考虑以下: a ='inputString' b = process('process.exe') c = cstringio.stringio()#输出存储桶 a> b> c A被管道到B并处理,但是B的输出不是 管道到c 执行A> B; B> C的工作原状是预期的. 令人失望的是,因为我想实现的是糖 流行过程的语法,直接看到 命令... 非常感谢克服这个问题的任何建议! 干杯, -Jelle ------------------------------------------------------------------------------------ --------------------------------- 类过程(POPEN,对象): def __init __(self,命令弦,wait = false): 断言isInstance(命令弦,str) cmd = commandstring.split() self.cmd =命令串 self.exe = cmd.pop(0) ## self.args = cmd self.process = popen(self.cmd,shell = true,stdin = pipe, stdout = pipe,close_fds = false) self.stdout = self.process.stdout self.stderr = self.process.stderr def __repr __(自我): 返回'流程实例(%s)'%(self.exe) def __或__(自我,其他):#管道 ''' 返回过程A->过程B的输出 将过程实例作为参数 ''' 断言isInstance(其他,过程),'%s \ n不是一个过程 实例'%(其他) 打印"管道" 自我>其他 def __lt __(自我,其他):#stdin ''' 获取Stringio,File或String Objectas参数 ''' 打印'>' 打印'stdin' 如果Isinstance(其他,str): self.process.communate(其他) 别的: self.stdout,self.stderr = self.process.communicate(other.read()) self.process.wait() def __gt __(自我,其他):#stdout ''' 将stringio,file或字符串对象作为参数 返回外部过程的结果 ''' 打印'<' 打印" Stdout" 断言hasattr(其他,"写")或isInstance(其他,str) 如果Isinstance(其他,str): 其他 += self.stdout 别的: other.write(self.stdout) ------------------------------------------------------------------------------------ ----------------------------

# 回答1

在2006年4月18日01:37:03 -0700,有传言说" Jelle" 可能已经写了: [狙击] 超载__或__特殊功能(即"管道"操作员)而不是 __GT__操作员. 我记得我已经看到了这样的命题(提及泵,过滤器和 接收器),但我在google.groups.com中找不到它 - 我认为aahz有 与之有关,但是ICBW. 啊,我找到了:http://mail.python.org/pipermail/pyt...il/044205.html 我不知道为什么我想起了Aahz :) 也检查此信息:http://groups.google.gr/group/comp.l...7EFD4D3AA490ED - - Tzotzioy,我说英格兰最好. "亲爱的保罗, 请停止向我们发送垃圾邮件." 科林斯人
# 回答2

嗨,克里斯托斯, 感谢您在那里的指示,令人印象深刻 - 一个12岁的线程仍然可以使有趣的阅读 - 您能够记住和追踪它...令人印象深刻... 感谢您的指示. 我觉得 输入>进程>输出 语法更强大,因为它会让您构建链接 以一种更可读性的方式进行通讯. 该课程的目标是构建命令链,例如: 输入> ProcessA | processb> ouput 如果只有一个操作员是 超载. 我很想知道它是否可以通过超载可行,因为没有__RGT_______________________________ 存在方法...
# 回答3

在2006年4月18日05:00:55 -0700,有传言说" Jelle" 可能已经写了: 操作员链接的问题是">"对待不同 比" |". 检查以下拆卸: 0 0 load_name 0(a) 3 load_name 1(b) 6 DUP_TOP 7 rot_three 8 compare_op 0(<) 11 jump_if_false 10(到24) 14 pop_top 15 load_name 2(c) 18 compare_op 0(<) 21跳跃2(至26)24 rot_two 25 pop_top 26 return_value 0 0 load_name 0(a) 3 load_name 1(b) 6 binary_or 7 load_name 2(c) 10 binary_or 11 return_value 比较操作员包括一些逻辑,以"做我的意思"(所以 那4 "操作员,只是不要链接,以便 避免这种意外的行为. - - Tzotzioy,我说英格兰最好. "亲爱的保罗, 请停止向我们发送垃圾邮件." 科林斯人
# 回答4

耶尔写道: 好的旧功能呼叫怎么样? a = lines('inputstring') b = process('process.exe') c = process('proc2.exe') 结果=管道(a,b,c,lines())#文本结果 结果=管道(a,b,c,bytes())#二进制结果 管道(a,b,c,file(" somefile"," wb"))#转储到二进制文件

标签: python

添加新评论