【问题标题】:Python: NullPointerException for os.system() and os.popen()Python:os.system() 和 os.popen() 的 NullPointerException
【发布时间】:2014-11-18 18:59:41
【问题描述】:

我在 python 2.2.1 上获得了 os.system()os.popen()NullPointerException。奇怪的是我有两台服务器,同样的代码在一台服务器上运行良好,但在另一台服务器上运行良好。第二个服务器中可能缺少什么?

下面是代码sn-p

import sys
import os

print (sys.version)   #This line works on both servers and gives 2.2.1 os output 
os.system('pwd')
os.popen('hostname -f').read().rstrip('\n')

我在第二台服务器中收到以下错误:

*File "/u01/oracle/mwhome/wlserver_10.3/common/wlst/modules/jython-modules.jar/Lib/javaos$py.class", line 333, in system
File "/u01/oracle/mwhome/wlserver_10.3/common/wlst/modules/jython-modules.jar/Lib/popen2.py", line 31, in ?
File "/u01/oracle/mwhome/wlserver_10.3/common/wlst/modules/jython-modules.jar/Lib/javashell.py", line 17, in ?
File "/u01/oracle/mwhome/wlserver_10.3/common/wlst/modules/jython-modules.jar/Lib/string$py.class", line 434, in ?
    at java.io.File.<init>(File.java:222)
    at java.lang.Package$1.run(Package.java:527)
    at java.lang.Package.defineSystemPackage(Package.java:520)
    at java.lang.Package.getSystemPackages(Package.java:511)
    at java.lang.ClassLoader.getPackages(ClassLoader.java:1513)
    at java.lang.ClassLoader.getPackages(ClassLoader.java:1511)
    at java.lang.Package.getPackages(Package.java:281)
    at org.python.core.JavaImportHelper.buildLoadedPackages(Unknown Source)
    at org.python.core.JavaImportHelper.tryAddPackage(Unknown Source)
    at org.python.core.imp.import_next(Unknown Source)
    at org.python.core.imp.import_name(Unknown Source)
    at org.python.core.imp.importName(Unknown Source)
    at org.python.core.ImportFunction.load(Unknown Source)
    at org.python.core.ImportFunction.__call__(Unknown Source)
    at org.python.core.PyObject.__call__(Unknown Source)
    at org.python.core.__builtin__.__import__(Unknown Source)
    at org.python.core.imp.importFromAs(Unknown Source)
    at org.python.core.imp.importFrom(Unknown Source)
    at string$py.f$0(C:\wlst\jython_2.2.1\Lib\string.py:434)
    at string$py.call_function(C:\wlst\jython_2.2.1\Lib\string.py)
    at org.python.core.PyTableCode.call(Unknown Source)
    at org.python.core.PyCode.call(Unknown Source)
    at org.python.core.imp.createFromCode(Unknown Source)
    at org.python.core.imp.createFromPyClass(Unknown Source)
    at org.python.core.ZipFileImporter$ZipFileLoader.load_module(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
java.lang.NullPointerException: java.lang.NullPointerException*

【问题讨论】:

  • 值得注意的是,强烈建议使用the subprocess module 而不是os.popen()os.system()
  • 嗨 Lattyware,我相信这个 python 版本(2.2.1)中不存在 subprocess 模块。当我尝试导入它时,我得到“ImportError: no module named subprocess”。
  • 2.2.1?哎哟。这是 wsadmin 的 Jython 版本吗?我从来没有见过任何东西需要这么旧的版本。我假设您与它相关,但如果不是,请更新到不那么古老的东西。

标签: python nullpointerexception jython os.system


【解决方案1】:

我在这里可能是错的,但我注意到堆栈跟踪中有“C:\”。如果这是在 Windows 系统上运行的,如果 os.system / popen 正在执行您在参数中输入的内容,那么“pwd”和“主机名”可能无法正常工作,这可能是您收到错误的原因。

无论如何我都不是 Windows 专家,但我认为这些命令不存在于基于 *nix 的操作系统之外。

【讨论】:

  • 嗨蒂姆,它是我正在运行的 Linux 服务器。但是,是的,我想知道为什么堆栈跟踪中存在“C:\”路径
  • 它是什么操作系统?您能否提供有关您正在运行的操作系统和 python 版本的更多详细信息?
  • stacktrace 上出现的C:\... 路径是由于 jython 模块是在 Windows 上构建的;当您构建本机应用程序时,会发生回溯引用源文件在编译之前所在的原始路径的情况。无论如何,如果您同时运行两个 Linux,那么这里应该没问题;试图在双方运行相同的脚本?可能是 Jython 的问题,而不是 Python 的问题。
猜你喜欢
  • 2012-06-17
  • 2015-01-21
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
相关资源
最近更新 更多