当作为脚本启动时,模块'subprocess'没有属性'run'

时间:2018-06-07 08:41:43

标签: python-3.x subprocess

我想在python 3.5中创建一个子进程,我有这个问题:

AttributeError: module 'subprocess' has no attribute 'run'

我搜索了同样的问题,但在其他答案中,问题来自python 2.7或版本低于3.5。在这里,我肯定会在python 3.5.2

这是我用来启动脚本的命令:

(isadora) rdharreville@rdharreville-VirtualBox:~/projects/isadora$ python webbackend/flask-app/subprocess.py 

和代码:

import subprocess
subprocess.run(["ls", "-l"])

真正的想法是,当我在相同的虚拟环境中运行它时,但是在python shell中,它可以工作:

(isadora) rdharreville@rdharreville-VirtualBox:~/projects/isadora$ python
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.run(["ls", "-l"])
total 44
-rw-rw-r-- 1 rdharreville rdharreville 17696 juin   6 17:28 bn.log
-rwxrwxr-x 1 rdharreville rdharreville  1114 mai   31 09:11 docker-compose.yml
drwxrwxr-x 4 rdharreville rdharreville  4096 mai   23 17:00 isadora
-rw-rw-r-- 1 rdharreville rdharreville     0 juin   6 17:44 logerrors.txt
drwxrwxr-x 6 rdharreville rdharreville  4096 mai   25 10:49 notebooks
drwxrwxr-x 6 rdharreville rdharreville  4096 juin   6 16:21 resources
drwxrwxr-x 3 rdharreville rdharreville  4096 juin   6 16:21 webbackend
drwxrwxr-x 8 rdharreville rdharreville  4096 juin   5 17:18 webfrontend
CompletedProcess(args=['ls', '-l'], returncode=0)
>>> 

我做的最后一件事是检查我是否在同一个python环境中,是打印(sys.version)作为脚本的开头,结果如下:

(isadora) rdharreville@rdharreville-VirtualBox:~/projects/isadora$ python webbackend/flask-app/subprocess.py 
3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609]
Traceback (most recent call last):
  File "webbackend/flask-app/subprocess.py", line 1, in <module>
    import subprocess
  File "/home/rdharreville/projects/isadora/webbackend/flask-app/subprocess.py", line 24, in <module>
    subprocess.run(["ls", "-l"])
AttributeError: module 'subprocess' has no attribute 'run'

所以这就是问题:

你知道为什么这个在一个案例(python shell)中工作,并且在作为脚本启动时不起作用?

PS:我也试过使用metods'Popen'和'调用'子进程模块,同样的问题...

1 个答案:

答案 0 :(得分:0)

将脚本subprocess.py的名称更改为其他名称。

因为当你将它作为脚本运行时,会出现一个带有脚本名称的模块&#39; subprocess&#39;。而且python里面没有找到run()方法。

当你在python shell中运行代码时,没有自定义的子进程&#39;模块来自你的脚本。