操作系统不';在python中获得输入之前无法工作

操作系统不';在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上正常工作。正在等待或子进程命令不工作

我试图运行youtube dl命令,但当os.system(命令)运行时,它正在等待终端上的输入(不需要输入)。我按enter键2-3次,它就开始下载了

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的情况下,我猜它就是其中之一。