python中stdin.write_Python:子进程.stdin.write工作不正常

我是python新手,但我可以编写代码并进行一些调试。在过去的几天里,以下问题一直困扰着我,我正在寻找答案。任何帮助都是非常感谢的。

任务:我想做一个交互式telnet(我知道有一个telnet库,但是出于各种原因我们没有使用它)。

为此,我使用子流程.popen在p = subprocess.Popen(telnet_command,

stdin = subprocess.PIPE,

stdout = outputfileobj,

stderr = errorfileobj)

我执行poll()以查看服务器是否已连接到会话。一旦我验证了,我就开始写stdin进行交互通信。在

^{pr2}$

这就是问题发生的地方。我得到了5/6次的http响应(或至少1/6次的输出),但是1/6次,我没有得到一个输出,子进程被终止-这是不可能的。在

我运行了一个系统跟踪失败的情况,请找到下面相同的。在16129 write(7, "GET / HTTP/1.1\nHost: www.google."..., 37) = 37

16129 gettimeofday({1310538497, 134474}, NULL) = 0

16129 futex(0x81993a8, FUTEX_WAKE, 1) = 0

16129 stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=56, ...}) = 0

16129 fstat64(4, {st_mode=S_IFREG|0644, st_size=520689, ...}) = 0

16129 _llseek(4, 520689, [520689], SEEK_SET) = 0

16129 stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=56, ...}) = 0

16129 write(4, "2011-07-13 06:28:17,134 : pconns"..., 170) = 170

16129 futex(0x81d3b30, FUTEX_WAKE, 1) = 0

16129 waitpid(16198, 0xffa945e8, WNOHANG) = 0

16129 gettimeofday({1310538497, 135160}, NULL) = 0

16129 fstat64(6, {st_mode=S_IFREG|0644, st_size=81, ...}) = 0

16129 fstat64(6, {st_mode=S_IFREG|0644, st_size=81, ...}) = 0

16129 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf74b9000

16129 _llseek(6, 0, [0], SEEK_SET) = 0

16129 fstat64(6, {st_mode=S_IFREG|0644, st_size=81, ...}) = 0

16129 _llseek(6, 0, [0], SEEK_CUR) = 0

16129 read(6, "Trying 74.125.236.48...\nConnecte"..., 4096) = 81

16129 read(6, "", 4096) = 0

16129 close(6) = 0

16129 munmap(0xf74b9000, 4096) = 0

16129 gettimeofday({1310538497, 135778}, NULL) = 0

16129 futex(0x81993a8, FUTEX_WAKE, 1) = 0

16198 <... select resumed> ) = 1 (in [0])

16198 read(0, "GET / HTTP/1.1\nHost: www.google."..., 8191) = 37

16129 stat64("/etc/localtime",

16198 ioctl(1, TCFLSH, 0) = -1 ENOTTY (Inappropriate ioctl for device)

16129 <... stat64 resumed> {st_mode=S_IFREG|0644, st_size=56, ...}) = 0

16198 select(4, [0 3], [3], [3], {0, 0}) = 1 (out [3], left {0, 0})

16129 fstat64(4, {st_mode=S_IFREG|0644, st_size=520859, ...}) = 0

16198 send(3, "GET / HTTP/1.1\r\nHos\377\363\377\375\6", 24, 0

16129 _llseek(4, 520859,

16198 <... send resumed> ) = 24

16198 select(4, [0 3], [3], [3], {0, 0}

16129 <... _llseek resumed> [520859], SEEK_SET) = 0

16198 <... select resumed> ) = 1 (out [3], left {0, 0})

16198 send(3, ": www.google.com\r\n\r\n", 20, 0

16129 stat64("/etc/localtime",

16198 <... send resumed> ) = 20

如果仔细观察跟踪中的行16198 send(3,“GET/HTTP/1.1\r\nHos\377\363\377\375\6”,24,0,字符串“Host”将被某些“Hos\377\363\377\375\6”所取代。我不知道为什么偶尔会发生这种情况,而且这会关闭我建立的telnet连接。如果你需要更多的数据,请告诉我。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值