Linuxでうまく動作するPython 3スクリプトがあります。私はWindowsの下でそれを実行すると、私は以下のトレースバック私はサウンドを再生しようとするたびに取得する:私の例外の原因は何ですか?
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Program Files (x86)\Python35-32\lib\multiprocessing\spawn.py", line 106, in spawn_main
exitcode = _main(fd)
File "C:\Program Files (x86)\Python35-32\lib\multiprocessing\spawn.py", line 116, in _main
self = pickle.load(from_parent)
EOFError: Ran out of input
を私はこれを担当するかもしれないと思うのコードを見てきましたが、私は表示されませんどのようにmultiprocessing
が私はすでにEOFErrorを捕まえているかのようにここでも関連しています。 (この例外でスクリプトが終了することはありません)
私の最大の問題は、Pythonが問題の原因となった場所についての情報がないことです。それはFile "<string>", line 1, in <module>
を参照していますが、これは役に立ちません。例外が実際にどこで発生しているのか、どうすればわかりますか?
# imported earlier:
import multiprocessing as mp
def _play(self, name):
'''Plays the sound given by name'''
if self.silent:
return True
def play_sound(q=None): # Called in a separate process so playing the sound doesn't block anything else.
'''q is a multiprocessing.Queue object for interprocess communication.'''
try:
snd = self.sounds[name]
if self._use_subprocess:
s = subprocess
return s.call([self.player, snd], stdout=s.DEVNULL, stderr=s.DEVNULL, timeout=20)
else:
return self.player(snd, self._winsound_options)
except (KeyboardInterrupt, EOFError):
sys.exit(0)
except subprocess.TimeoutExpired as e:
#if q:
# q.put(e)
sys.stderr.write('\nSOUND ERROR: Unable to play the sound "{}": Timeout expired.\n\n'.format(snd))
sys.exit(1)
except FileNotFoundError:
sys.stderr.write('\nSOUND ERROR: Unable to locate the sound player "{}".\n\n'.format(self.player))
sys.exit(2)
except EOFError:
pass
#q = mp.Queue()
proc_name = 'Play sound: {}; time: {}'.format(name, datetime.datetime.now().strftime('%I:%M:%S %p'))
try:
proc = mp.Process(target=play_sound, name=proc_name)#, args=(q,))
proc.start()
# On Windows, multiprocessing attempts to pickle this method, which fails
# because it's called by an inner function defined in __getattr__. We'll
# Skip using multiprocessing in this case.
# References: https://github.com/ouspg/trytls/issues/196 and http://stackoverflow.com/a/36995008/713735
except (AttributeError, EOFError):
play_sound()
'ファイル" "の部分は、コマンドラインからPython -cを使って直接Pythonコードスニペットを実行することができます。いくつかのコードはここにあります。 '。あなたはランチャースクリプトのどこにいてもやっていますか? –
それは確かにそれがどのように見えるのですが、私はそれをしていないことをあなたに保証することができます。他のトレースバック私は正常に見える。 –
あなたのコードで潜在的に問題となるのは、Windows上で 'multiprocessing'を使うためには、メインプロセスのコードを' if __name__ == '__main __': 'ブロックに入れる必要があるということです。 [_multiprocessingプログラミングのガイドライン_](https:/ /)の[Windows](https://docs.python.org/2/library/multiprocessing.html#windows)セクションの**メインモジュールの安全なインポート**サブセクションを参照してください。 /docs.python.org/2/library/multiprocessing.html#programming-guidelines)。 – martineau