簡體   English   中英

Windows上嘗試運行簡單程序的RuntimeError

[英]RuntimeError on Windows trying to run a simple program

我有這個簡單的程序:

from PIL import Image
import pyscreenshot as ImageGrab

print "hi"
im=ImageGrab.grab()
im.show()

這在Ubuntu上可以很好地工作,但是在Windows上會出現以下錯誤:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Python27\lib\multiprocessing\forking.py", line 380, in main
    prepare(preparation_data)
  File "C:\Python27\lib\multiprocessing\forking.py", line 509, in prepare
    '__parents_main__', file, path_name, etc
  File "C:\Users\Administrator\Downloads\sample.py", line 5, in <module>
    im=ImageGrab.grab()
  File "C:\Python27\lib\site-packages\pyscreenshot\__init__.py", line 46, in gra
b
    return _grab(to_file=False, childprocess=childprocess, backend=backend, bbox
=bbox)
  File "C:\Python27\lib\site-packages\pyscreenshot\__init__.py", line 29, in _gr
ab
    return run_in_childprocess(_grab_simple, imcodec.codec, to_file, backend, bb
ox, filename)
  File "C:\Python27\lib\site-packages\pyscreenshot\procutil.py", line 28, in run
_in_childprocess
    p.start()
  File "C:\Python27\lib\multiprocessing\process.py", line 130, in start
    self._popen = Popen(self)
  File "C:\Python27\lib\multiprocessing\forking.py", line 258, in __init__
    cmd = get_command_line() + [rhandle]
  File "C:\Python27\lib\multiprocessing\forking.py", line 358, in get_command_li
ne
    is not going to be frozen to produce a Windows executable.''')
RuntimeError:
            Attempt to start a new process before the current process
            has finished its bootstrapping phase.

            This probably means that you are on Windows and you have
            forgotten to use the proper idiom in the main module:

                if __name__ == '__main__':
                    freeze_support()
                    ...

            The "freeze_support()" line can be omitted if the program
            is not going to be frozen to produce a Windows executable.

沒有多重處理。 我看到了其他答案,但它們沒有幫助。

有人可以在這里建議一個可能的問題嗎?

追溯表明在后台使用了multiprocessing ,而不是在您自己的代碼中顯式使用。 具體來說,它是由pyscreenshot\\procutil.py 追溯的相關行:

File "C:\Python27\lib\site-packages\pyscreenshot\procutil.py", line 28, in run
_in_childprocess
    p.start()
  File "C:\Python27\lib\multiprocessing\process.py", line 130, in start
    self._popen = Popen(self)

由於問題出在庫中,因此您只能自行修改庫,否則您將無能為力。 但是, 此頁面pyscreenshot是“ ImageGrab模塊的替換,僅在Windows上有效”。 因此,您應該安裝ImageGrab庫,該庫似乎功能完全相同,但僅與Windows和MacOS兼容(請參閱此處

Windows上的多處理模塊存在一個已知問題(詳細說明roganosh備注):使用multiprocessing模塊必須在函數或__main__節中完成(在所有導入初始化之后),而不是在腳本的根目錄中,因為Windows生成python可執行文件的方式(因此出現“引導階段”錯誤)。 在Linux上沒有問題。 看起來很像Windows上嘗試python multiprocessing的RuntimeError相同的問題。

嘗試更改為以下代碼:

from PIL import Image
import pyscreenshot as ImageGrab

if __name__ == "__main__":
    im=ImageGrab.grab()
    im.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM