我正在使用一个科学软件,包括一个os.system()
用于运行另一个科学程序的Python脚本.在子进程运行时,Python在某些时候打印以下内容:
close failed in file object destructor:
IOError: [Errno 9] Bad file descriptor
Run Code Online (Sandbox Code Playgroud)
我相信此消息会在os.system()
返回的同时打印出来.
我现在的问题是:
哪种情况会导致这种类型的IOError?它究竟意味着什么?对于已被调用的子进程意味着什么os.system()
?
我有一个脚本,提示用户输入文件名(要打开的文件),如果当前目录中不存在该文件,则再次提示用户.这是简短的版本:
file = input("Type filename: ")
...
try:
fileContent = open(filename, "r")
...
except FileNotFoundError:
...
Run Code Online (Sandbox Code Playgroud)
当我在Python 3.3x中使用我的MacOS X测试我的脚本时,当我故意键入错误的文件名时它完全正常(它在"expect"下执行套件).
但是,当我想在Python 3.2x中的Windows计算机上运行我的代码时,我收到一条错误,指出未定义"FileNotFoundError".因此,Windows上的Python 3.2认为"FileNotFoundError"是一个变量,程序退出并出现错误.
我发现如果输入文件名无效,Windows上的Python 3.2会抛出"IOError".我在我的Linux机器上用Python 2.7测试过,它也是一个IOError.
我现在的问题是,代码用
except "FileNotFoundError":
Run Code Online (Sandbox Code Playgroud)
将无法在Windows的Python 3.2上运行,但如果我将其更改为
except "IOError":
Run Code Online (Sandbox Code Playgroud)
它不再适用于我的Mac.
我怎么能解决它?我能想到的唯一方法是使用just
except
,我通常不想要.
可能导致此错误的原因:
$ sudo tail -n 100 /var/log/apache2/error.log'
[Wed Dec 29 15:20:03 2010] [error] [client 220.181.108.181] mod_wsgi (pid=20343): Exception occurred processing WSGI script '/home/username/public_html/idm.wsgi'.
[Wed Dec 29 15:20:03 2010] [error] [client 220.181.108.181] IOError: failed to write data
Run Code Online (Sandbox Code Playgroud)
这是WSGI脚本:
$ cat public_html/idm.wsgi
import os
import sys
sys.path.append('/home/username/public_html/IDM_app/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Run Code Online (Sandbox Code Playgroud)
为什么Django无法写入数据?
我正在运行Django 1.2.4
我正在拍摄jpg图像并使用numpy的fft2来创建/保存新图像.但是它会抛出此错误
"IOError: cannot write mode F as JPEG"
Run Code Online (Sandbox Code Playgroud)
PIL中的CMYK和JPEG文件有问题吗?
p = Image.open('kibera.jpg')
bw_p = p.convert('L')
array_p = numpy.asarray(bw_p)
fft_p = abs(numpy.fft.rfft2(array_p))
new_p = Image.fromarray(fft_p)
new_p.save('kibera0.jpg')
new_p.histogram()
Run Code Online (Sandbox Code Playgroud) 我正在尝试运行以下代码:
import java.sql.DriverManager;
public class Connect {
public static void main(String[] args){
try{
String databaseDriver = "net.sourceforge.jtds.jdbc.Driver";
Class.forName(databaseDriver);
}
catch (Exception e) {
e.printStackTrace();
}
try{
String url = "jdbc:jtds:sqlserver://BHX:1433/Forecast;instance=SQLEPXRESS";
java.sql.Connection con = DriverManager.getConnection(url);
System.out.println("Connection");
}
catch (Exception e){
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的SQL服务器在机器BHX上的端口1433上运行.
我得到的错误信息如下:
java.sql.SQLException: I/O Error: SSO Failed: Native SSPI library not loaded. Check the java.library.path system property.
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:615)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:352)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:185)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at Connect.main(Connect.java:14)
Caused by: java.io.IOException: SSO …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用pip安装PyQt包,但是我收到此错误:
~$ pip install PyQt
Downloading/unpacking PyQt
Downloading PyQt-x11-gpl-4.8.3.tar.gz
(9.8Mb): 9.8Mb downloaded Running
setup.py egg_info for package PyQt
Traceback (most recent call last):
File "<string>", line 14, in <module>
IOError: [Errno 2] No such file or directory:
'/home/john/build/PyQt/setup.py'
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 14, in
<module>
IOError: [Errno 2] No such file or
directory:
'/home/john/build/PyQt/setup.py
---------------------------------------- Command python setup.py egg_info
failed with error code 1 Storing
complete log in
/home/john/.pip/pip.log
Run Code Online (Sandbox Code Playgroud) 我从未见过IOError
抛出一个案例.文档IOError
对此的唯一说法是:
发生严重I/O错误时抛出.
没有任何子类或任何其他明显的东西.
有没有什么时候IOError
会被抛出java?可能导致什么?
(这不应该被混淆IOException
- IOException
被广泛使用,并且是常用的;我知道.我想知道不太常见IOError
).
C有perror和errno,它打印并存储遇到的最后一个错误.这在执行文件io时很方便,因为我不必将fstat()作为fopen()参数失败的每个文件向用户提供调用失败的原因.
我想知道在python中优雅地处理IOError异常时获取errno的正确方法是什么?
In [1]: fp = open("/notthere") --------------------------------------------------------------------------- IOError Traceback (most recent call last) /home/mugen/ in () IOError: [Errno 2] No such file or directory: '/notthere' In [2]: fp = open("test/testfile") --------------------------------------------------------------------------- IOError Traceback (most recent call last) /home/mugen/ in () IOError: [Errno 13] Permission denied: 'test/testfile' In [5]: try: ...: fp = open("nothere") ...: except IOError: ...: print "This failed for some reason..." ...: ...: This failed for some reason...
我不知道为什么,但出于某种原因,每当我在输出文件的文件名中有"region"时,它就会给我这个错误:
IOError:[Errno 22]无效模式('w')或文件名:'path\regionlog.txt'
它为"region.txt","logregion.txt"等执行此操作.
class writeTo:
def __init__(self, stdout, name):
self.stdout = stdout
self.log = file(name, 'w') #here is where it says the error occurs
output = os.path.abspath('path\regionlog.txt')
writer = writeTo(sys.stdout, output) #and here too
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我真的想将我的文件命名为"regionlog.txt",但它不断出现这个错误.有办法解决吗?
我IOError: bad message length
在向map
函数传递大参数时得到了一个.我怎么能避免这个?我设置N=1500
或更大时会发生错误.
代码是:
import numpy as np
import multiprocessing
def func(args):
i=args[0]
images=args[1]
print i
return 0
N=1500 #N=1000 works fine
images=[]
for i in np.arange(N):
images.append(np.random.random_integers(1,100,size=(500,500)))
iter_args=[]
for i in range(0,1):
iter_args.append([i,images])
pool=multiprocessing.Pool()
print pool
pool.map(func,iter_args)
Run Code Online (Sandbox Code Playgroud)
在文档中multiprocessing
有recv_bytes
一个引发IOError 的函数.可能是因为这个吗?(https://python.readthedocs.org/en/v2.7.2/library/multiprocessing.html)
编辑
如果我使用images
numpy数组而不是列表,我得到一个不同的错误:SystemError: NULL result without error in PyObject_Call
.有点不同的代码:
import numpy as np
import multiprocessing
def func(args):
i=args[0]
images=args[1]
print i
return 0
N=1500 …
Run Code Online (Sandbox Code Playgroud)