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

Ren*_*LLE 2 subprocess python-3.x

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

AttributeError: module 'subprocess' has no attribute 'run'
Run Code Online (Sandbox Code Playgroud)

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

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

(isadora) rdharreville@rdharreville-VirtualBox:~/projects/isadora$ python webbackend/flask-app/subprocess.py 
Run Code Online (Sandbox Code Playgroud)

和代码:

import subprocess
subprocess.run(["ls", "-l"])
Run Code Online (Sandbox Code Playgroud)

真正让我感到震惊的是,当我在同一个虚拟环境中运行它时,但在 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)
>>> 
Run Code Online (Sandbox Code Playgroud)

我做的最后一件事是检查我是否在同一个 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'
Run Code Online (Sandbox Code Playgroud)

所以这里的问题是:

您知道为什么这在一种情况下有效(python shell),并且在作为脚本启动时无效吗?

PS:我也尝试过使用子进程模块的方法'Popen'和'call',同样的问题......

小智 7

将脚本 subprocess.py 的名称更改为不同的名称。

因为当您将它作为脚本运行时,会出现名为“子进程”的模块。python 在其中找不到 run() 方法。

当您在 python shell 中运行代码时,您的脚本没有生成自定义的“子进程”模块。