如何在Smalltalk中通过其stdin,stdout,stderr与子进程进行交互?

随机B

这段Python代码显示了如何在Windows 10中调用某个进程并向其发送字符串命令,如何通过该进程的stdin,stdout管道读取其字符串响应:

Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from subprocess import *
>>> p = Popen("c:/python38/python.exe", stdin=PIPE, stdout=PIPE)
>>> p.stdin.write(b"print(1+9)\n")
11
>>> p.communicate()
(b'10\r\n', None)
>>>

如您所见,python.exe进程返回10作为对的答案print(1+9)现在我想在Pharo(或Squeak)中做同样的事情:在Windows 10 OS中-我想类似的东西,即简短,简单,可理解,确实有效。

我安装了OSProcess,ProcessWrapper(在Pharo中缺少它们,也很奇怪,我得到警告,他们未标记为Pharo 8.0,也没有检查它们在Pharo 8.0中不能正常工作,但可以),然后尝试使用ProcessWrapper,PipeableOSProcess(复制-从网络粘贴不同的代码段),等等-零成功!结果是:

  • 没有任何反应,python.exe没有启动
  • VM错误控制台已打开(Pharo底部的白色控制台,由F2菜单控制)
  • 不同的例外
  • 等等

有人会向我展示一个简单的工作示例,如何在一个循环中启动一个过程并向其发送命令,阅读答案,然后再次发送,依此类推-我计划在一个分离的线程中进行此类通信并将其用作某种服务,因为Pharo,Smalltalk通常缺少大多数绑定,所以接下来我将使用子流程通信,例如在过去的“好”时期...

我知道如何调用命令并获取其输出:

out := LibC resultOfCommand: 'dir ', aDir.

但我正在谈论另一种情况:与正在运行的进程进行交互通信(例如,使用SSH或类似上面示例中的python.exe之类的通信)。

PS。#pipe:mode甚至有可能用LibC做到这一点

巨嘴鸟

首先,我PipeableOsProcess可能在Windows上损坏了它。我已经尝试过了,它只是打开了一个命令行而已(没有冻结我的Pharo 8)。整体OSProcess在我眼中无法正常工作。

因此,我LibC尝试使用Windows无法正常工作。

我是一个定义对标准LibC的访问的模块。我可以在Linux和OSX下使用,但由于明显的原因在Windows下不可用:)

接下来是说Python的Windows支持可能比Pharo更好。

该解决方案更像是使用文件的变通方法,它是使用LibC#runCommand:(我尝试提供一个与上面显示的示例类似的示例):

| count command result outputFile errorFile  |

count := 9+1.  "The counting"
command := 'echo ', count asString. "command run at the command line"

outputFile := 'output'. "a file into which the output is redirected"
errorFile := 'error'. "a file where the error output is redirected "

result := LibC runCommand: command, "run the command "
    ' >', outputFile, "redirect the output to output file"
    ' 2>', errorFile.

"reading back the value from output file"
outputFile asFileReference contents lines.
"reading back the value from the error file - which is empty in this case" 
errorFile asFileReference contents lines. 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我如何在Windows上的python中测试子进程的stdout,stderr

来自分类Dev

bash是否有可能通过stdin / stdout在子进程的读取和写入之间“交互”交替?

来自分类Dev

如何正确启动进程并转发stdin / stdout / stderr?

来自分类Dev

使用stdout / stderr以外的管道与子进程进行通信

来自分类Dev

在Erlang中,如何独立捕获子进程的stdout和stderr?

来自分类Dev

如何使子进程按顺序获取stdout和stderr?

来自分类Dev

如何在bash中同时重定向stdin和stdout和stderr?

来自分类Dev

在Linux中如何准确实现stdin,stdout,stderr?

来自分类Dev

如何在stdout / stderr中捕获提示?

来自分类Dev

Perl捕获子进程的STDERR和STDOUT

来自分类Dev

Python子进程抑制stdout和stderr

来自分类Dev

实时读取/写入子进程stdin / stdout

来自分类Dev

Golang如何实现stdin / stdout / stderr

来自分类Dev

如何在Python中通过管道传递到os.execv进程的stdin

来自分类Dev

如何在Python中通过管道传递到os.execv'd进程的stdin

来自分类Dev

接收SIGUSR2 / SIGINT时如何在python中获取子进程的stdout

来自分类Dev

如何使用自定义的类文件对象作为子进程stdout / stderr?

来自分类Dev

如何使用子进程Popen读取stdout和stderr并将其全部保存?

来自分类Dev

如何跟踪来自Docker容器内所有子进程的所有写入调用(对stdout / stderr)?

来自分类Dev

如何运行Python子进程和流,还可以过滤stdout和stderr?

来自分类Dev

Node.js中的子进程stdout和stderr列大小

来自分类Dev

Node.js中的子进程stdout和stderr列大小

来自分类Dev

在我的Django应用中访问Celery的子进程stdout和stderr

来自分类Dev

如何连接两个(管道stdin和stdout)Deno子进程?

来自分类Dev

如何在 bash 中抑制 stdout 和 stderr

来自分类Dev

如何在 ASP.NET 3.5 中通过 IIS7 启动与服务器桌面交互的进程?

来自分类Dev

如果创建,Python子进程stderr / stdout字段为None

来自分类Dev

将子进程的stdout / stderr重定向到文件

来自分类Dev

在Python的子进程/ Popen中将stdout重定向到stderr

Related 相关文章

  1. 1

    我如何在Windows上的python中测试子进程的stdout,stderr

  2. 2

    bash是否有可能通过stdin / stdout在子进程的读取和写入之间“交互”交替?

  3. 3

    如何正确启动进程并转发stdin / stdout / stderr?

  4. 4

    使用stdout / stderr以外的管道与子进程进行通信

  5. 5

    在Erlang中,如何独立捕获子进程的stdout和stderr?

  6. 6

    如何使子进程按顺序获取stdout和stderr?

  7. 7

    如何在bash中同时重定向stdin和stdout和stderr?

  8. 8

    在Linux中如何准确实现stdin,stdout,stderr?

  9. 9

    如何在stdout / stderr中捕获提示?

  10. 10

    Perl捕获子进程的STDERR和STDOUT

  11. 11

    Python子进程抑制stdout和stderr

  12. 12

    实时读取/写入子进程stdin / stdout

  13. 13

    Golang如何实现stdin / stdout / stderr

  14. 14

    如何在Python中通过管道传递到os.execv进程的stdin

  15. 15

    如何在Python中通过管道传递到os.execv'd进程的stdin

  16. 16

    接收SIGUSR2 / SIGINT时如何在python中获取子进程的stdout

  17. 17

    如何使用自定义的类文件对象作为子进程stdout / stderr?

  18. 18

    如何使用子进程Popen读取stdout和stderr并将其全部保存?

  19. 19

    如何跟踪来自Docker容器内所有子进程的所有写入调用(对stdout / stderr)?

  20. 20

    如何运行Python子进程和流,还可以过滤stdout和stderr?

  21. 21

    Node.js中的子进程stdout和stderr列大小

  22. 22

    Node.js中的子进程stdout和stderr列大小

  23. 23

    在我的Django应用中访问Celery的子进程stdout和stderr

  24. 24

    如何连接两个(管道stdin和stdout)Deno子进程?

  25. 25

    如何在 bash 中抑制 stdout 和 stderr

  26. 26

    如何在 ASP.NET 3.5 中通过 IIS7 启动与服务器桌面交互的进程?

  27. 27

    如果创建,Python子进程stderr / stdout字段为None

  28. 28

    将子进程的stdout / stderr重定向到文件

  29. 29

    在Python的子进程/ Popen中将stdout重定向到stderr

热门标签

归档