Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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子流程给出错误“文件名目录名或卷语法不正确”_Python - Fatal编程技术网

python子流程给出错误“文件名目录名或卷语法不正确”

python子流程给出错误“文件名目录名或卷语法不正确”,python,Python,我试图使用子进程打开一个文件: import subprocess subprocess.call('notepad > hmm.txt') 或 但是它给了我一个错误,文件名、目录名或卷语法不正确。这很简单也很愚蠢,但我发现包含选项shell=True可以解决这个问题,因为它随后在shell中运行命令,而不是子进程调用它的另一种方式,我不确定它的正确性……请您理解,进行注释。对于subprocess.Popen应该是相同的 subprocess.call('notepad > h

我试图使用子进程打开一个文件:

import subprocess

subprocess.call('notepad > hmm.txt')


但是它给了我一个错误,文件名、目录名或卷语法不正确。

这很简单也很愚蠢,但我发现包含选项shell=True可以解决这个问题,因为它随后在shell中运行命令,而不是子进程调用它的另一种方式,我不确定它的正确性……请您理解,进行注释。对于subprocess.Popen应该是相同的

subprocess.call('notepad > hmm.txt', shell = True)

另外,请注意shell=True,因为:

警告:执行包含来自不受信任源的未初始化输入的shell命令会使程序易受shell注入攻击,这是一个严重的安全缺陷,可能导致任意命令执行。因此,如果命令字符串是从外部输入构建的:

重定向是由shell提供的功能,在您的情况下可能是cmd.exe,则强烈建议不要使用shell=True。您可以使用Popen将stdout设置为您自己的文件对象。start也是一个shell命令,同样,它不会做任何使用Popen不能做的事情。shel在Windows上做的另一件事是文件名关联。同样,你可以自己访问注册表,但生命太短了。
subprocess.call('notepad > hmm.txt', shell = True)
subprocess.call('start excel.exe \"hmm.txt\"', shell = True)