Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将命令发送到现有cmd shell_Python_Windows_Cmd_Windows Console - Fatal编程技术网

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连接,我发现您可

我正在尝试创建一个脚本来登录类似于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连接,我发现您可以对每个输入使用单独的文本文件,然后只运行以下命令:

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()
杀死它。