7-Zip などでファイルのリストを圧縮するプログラム (Windows で使用されます) を作成しようとしています。
私subprocess
は正しい引数で 7-Zip 実行可能ファイルを実行していました。
出力subprocess
で DOS シェルを開きます。7z.exe
ファイル圧縮のパーセンテージ指標があり、プロセスが非常に長くなる場合があるため、これは良いことです. 私の問題は、ユーザーが自発的または偶然に、次のいずれかの方法で圧縮タスクを中断できることです。
- DOS ウィンドウの閉じるボタンをクリックする、または
- Ctrl-を押しCます。
から開いた DOS シェルへのあらゆる種類の入力を無効にすることはできsubprocess
ますか? あるいは、実行時に DOS シェルの出力を自分のプログラムに渡すにはどうすればよいですか? process.stdout.read(1024)
とを試しましprocess.communicate()
たが、サブプロセスが終了したときに両方とも出力を読み取りました。実行中ではありません。
すべての 7-Zip タスクを同時に実行できるようにsubprocess.Popen()
代わりに使用しましたが、問題の解決に役立つ場合は変更できます。subprocess.call()
for f in self.fileList:
destination = self.newPath + "\\" + basename(f) + ".7z"
arglist = [self.sevZipPath, "a", "-mx9", destination, f]
sp = subprocess.Popen(
args = arglist,
cwd = self.newPath,
shell = False
)