Python 将命令发送到现有cmd shell
我正在尝试创建一个脚本来登录类似于ftp的东西,但它不使用ftp命令。我正在考虑尝试批处理文件或Python解决方案 通过cmd shell手动执行,如下所示:Python 将命令发送到现有cmd shell,python,windows,cmd,windows-console,Python,Windows,Cmd,Windows Console,我正在尝试创建一个脚本来登录类似于ftp的东西,但它不使用ftp命令。我正在考虑尝试批处理文件或Python解决方案 通过cmd shell手动执行,如下所示: C:\Users..etc> 被动ftp 123.45.67.890#以被动模式连接到ftp #然后要求输入用户名,但您再也看不到“C:\Users..etc.” 连接到123.45.67.890 220(vsFTPd 3.0.2) 用户名: #在这里输入用户名,然后输入密码,然后开始dl/ul'ing 对于标准ftp连接,我发现您可
C:\Users..etc>
被动ftp 123.45.67.890#以被动模式连接到ftp
#然后要求输入用户名,但您再也看不到“C:\Users..etc.”
连接到123.45.67.890
220(vsFTPd 3.0.2)
用户名:
#在这里输入用户名,然后输入密码,然后开始dl/ul'ing
对于标准ftp连接,我发现您可以对每个输入使用单独的文本文件,然后只运行以下命令:
ftp -s:filename.txt
但是看起来这个ftp程序不接受这个。我使用以下文本文件进行了尝试:
passiveftp 123.45.67.890
usernamehere
passwordhere
hash
这导致了以下输出:
C:\Users\etc.>passiveftp -s:filename.txt
ftp> Invalid command.
ftp> Invalid command.
ftp> Invalid command.
ftp> Hash mark printing On ftp: (2048 bytes/hash mark).
ftp>
有没有一种方法可以像ftp命令那样自动化这个场景?已经考虑过通过Python的
子流程.Popen运行passiveEFTP
,并将命令序列以CRLF行结尾输送到stdin?除非程序坚持直接从控制台读取输入,否则这在大多数情况下都应该有效。显示了如何控制FTP会话。您应该能够根据自己的具体需要对其进行调整。似乎可以将PASV模式与Microsoft提供的ftp.exe一起使用。您必须使用不同的FTP程序还有其他原因吗?@eryksun带有类似于subprocess.Popen([“start”、“/wait”、“cmd”、“/c”、“passiveEFTP address”+“\r”+“\n”、“username”+“\r”+“\n”、“password”+“\r”+“\n”]、stdout=subprocess.PIPE、shell=True)的内容。
出现一个窗口,并且passiveEFTP address
工作,但它和以前一样,没有输入用户名。这是CRLF的正确用法吗?您不需要shell,输入应该写入stdin。例如:p=subprocess.Popen([“passiveftp”,address],stdin=subprocess.PIPE,bufsize=0)代码>p.stdin.write(b“用户名\r\n密码\r\n”)代码>。最终,您可以向它发送一个退出命令,或者使用p.kill()
杀死它。