これはスタックオーバーフローに関する私の最初の質問です!
私は今、凍結して配布したいブックコレクションを管理するためのPythonスクリプトを作成しています(これは私の最初の '大きな'プロジェクトです)。 多くのオプションを見て、私はCx_Freezeで試してみることにしました。 (私はPython 3.6とCx_Freeze 5.1.1を使用しています)。Pythonのsuprocessがcx_freezeの後で動作しない
このプロジェクトでは、スクリプトから別のスクリプトに移動するために「サブプロセス」を使用することがよくあります。それは私がCx_Freezeが
python setup.py build
を使用してビルドフォルダを作ってみよう場合、それは同様に動作しますが、私は、インストール後にそれを
python setup.py bdist_msi
で配布可能ファイルを作成しようとすると、うまく動作しますインタプリタで サブプロセスの最初の呼び出しまで開始し、それ以降は何も実行しません。
はここ
from cx_Freeze import setup, Executable
import os.path
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')
setup(
name = "Libro",
version = "1.0.0",
options = {"build_exe": {
'packages': ["tkinter", "subprocess", ],
'include_files': [os.path.join(PYTHON_INSTALL_DIR, 'DLLs','tk86t.dll'), \
os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'), \
'logo50x50.gif', 'check_1.txt', 'check_2.txt', 'start.py', \
'createdb.py', *and_a_few_more_files*],
'include_msvcr': True,
}},
executables = [Executable("Libro.py",base="Win32GUI")]
setup.pyであり、これは実行可能となりLibro.pyスクリプトです。
#This script checks the documents check_1 and check_2 and then launches
# createdb.py or start.py
import subprocess
from tkinter import *
import tkinter.messagebox as box
root= Tk()
root.withdraw()
with open('check_1.txt', 'r') as check_1:
for line in check_1:
line = line.strip()
value_1 = int(line)
with open('check_2.txt', 'r') as check_2:
for line in check_2:
line = line.strip()
value_2 = int(line)
if value_1 == 0 and value_2 == 0:
box.showinfo('Libro 1.0', '''
Welcome to the installation of Libro.
I am now creating the database for your catalogue.
This may take a moment.''')
subprocess.call("createdb.py", shell=True)
else:
subprocess.call("start.py", shell=True)
root.mainloop()
それは、check_1とcheck_2探しTkinterのSHOWINFOウィンドウを示し、その後...それはそれだ、開始します。 私はどんな提案にも非常に感謝しています!ありがとう:)
こんにちはサイモンあり、あなたは、おかげで非常に正しいです。申し訳ありません - – Alessandro