操作系统不';在python中获得输入之前无法工作
我试图运行youtube dl命令,但当os.system(命令)运行时,它正在等待终端上的输入(不需要输入)。我按enter键2-3次,它就开始下载了操作系统不';在python中获得输入之前无法工作,python,youtube-dl,Python,Youtube Dl,我试图运行youtube dl命令,但当os.system(命令)运行时,它正在等待终端上的输入(不需要输入)。我按enter键2-3次,它就开始下载了 url = sys.argv[1] command = "youtube-dl " + url print("downloading...") os.system(command) print("test") 我看不到“测试”输出。命令在cmd上正常工作。正在等待或子进程命令不工作
url = sys.argv[1]
command = "youtube-dl " + url
print("downloading...")
os.system(command)
print("test")
我看不到“测试”输出。命令在cmd上正常工作。正在等待或子进程命令不工作
使用
子进程
而不是操作系统
将允许您设置stdin=subprocess.DEVNULL
,这样它就无法从stdin读取数据(不去TTY,大多数程序都不去)。此外,传递一个列表并保留默认值shell=False
,可以避免安全问题,因为URL中的内容可能会被shell视为要运行的命令
subprocess.run(["youtube-dl", url], stdin=subprocess.DEVNULL)
您可能希望了解
子流程
和系统
之间的区别。请尝试等待,而不是按ENTER键。我尝试等待,但它正在等待输入。将其stdin重定向为来自/dev/null
,youtube-dl是用Python编写的,您可以不用经过os
。很好@CharlesDuffy或其他人…你能解释一下为什么这可以解决问题吗?是不是tube.dl确实在提取某种输入,还是任何命令都会发生这种情况?与系统
和子流程运行
之间的其他差异相比,这里的关键点是stdin的重定向吗?无论哪种方式,如果tube.dl在命令行上运行时不提示输入,为什么它不在os.system上运行?@Steve,相当多的程序试图“被动地”查找输入——检查用户是否键入任何内容并打印状态或其他内容(如果有);这就足够在没有前景的时候触发信号了。在不了解youtube dl的情况下,我猜它就是其中之一。