【问题标题】:Python command "os.system" not workingPython命令“os.system”不起作用
【发布时间】:2018-09-14 23:18:22
【问题描述】:

所以,我用一个 .py 文件测试了 os.system(call),我只在其中放置了通知,并且它工作正常。 但是另一个文件不起作用。另一个文件包含很多代码,只是告诉你从什么开始:

import sys, socket, subprocess, time, os, platform, struct, getpass, datetime, plistlib, re, stat, grp, shutil
import string, json, traceback, pwd, urllib, urllib2, base64, binascii, hashlib, sqlite3, bz2, pickle, ast
import StringIO, zipfile, hmac, tempfile, ssl
from xml.etree import ElementTree as ET
from subprocess import Popen, PIPE
from glob import glob

如何运行该文件?

【问题讨论】:

  • 你可能一开始就不应该使用os.system(你已经在使用subprocess,所以你应该知道这一点)。但与此同时,仅仅向我们展示 6 行随机且可能不相关的代码并不是minimal reproducible example。向我们展示您如何尝试调用它,以及您遇到了什么错误。
  • 请添加更多详细信息,您只发布了导入。
  • 另外,为什么这同时被标记为 python-3.x 和 python-2.7?你用的是哪一个?
  • 请定义“不工作”。你收到错误信息了吗?你怎么知道它没有运行?你测试了os.system()的返回码吗?
  • 我尝试了所有调用... os.system、子进程等。所有时间都在同一端

标签: python python-3.x macos python-2.7


【解决方案1】:

如果这确实是您的脚本的开始,那么您的脚本将无法执行。如果你想让 Python 脚本在 POSIX 系统(包括 Mac OS X)上可执行,你需要在文件的最开始有一个shebang 行。例如:

#!/usr/bin/env python3

您还需要确保设置了可执行位 (chmod u+x myscript.py)。

但如果您不使用os.system,所有这些都可以避免。您已经在导入 subprocess,所以只需使用它:

subprocess.run([sys.executable, "myscript.py"])

这会运行已在运行调用脚本的同一 Python 解释器的副本,并告诉它运行您的脚本。

(当然你可以用os.system做到这一点,如果你想处理字符串连接并且可能需要引用,如果你想无缘无故地产生一个额外的shell,如果你想确保你无法控制输出......)

【讨论】:

  • @Jean-FrançoisFabre 你怎么知道我没有创建一个名为myscript 的对象并在其.py 属性中保存某个脚本的路径名? :)
  • 感谢您的回答。当我尝试使用它时,总是得到错误:AttributeError: 'module' object has no attribute 'run'
  • @VladyslavPG 这就是为什么告诉我们你正在使用哪个版本的 Python 很重要,而不是用每个版本来标记你的问题。例如,run 在 3.3 或 2.6 中不存在,因此您需要改用 call 或 check_call。请参阅您的版本的 subprocess 的文档,您可以查看可用的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 2018-05-26
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
相关资源
最近更新 更多