Я изучаю python3, и у меня есть базовый код для python3.6.6 с их веб-сайта
Но я также запускаю python в режиме предупреждения -Wd, поэтому он сообщит мне, есть ли другие ошибки даже в работающей программе.
Я пытаюсь выполнить базовые сценарии оболочки.
https://codecalamity.com/run-subprocess-run/
скажем, я бегу
import subprocess
import os
print("Welcome to the obs program")
cmd=str(input("enter commands\n"))
print(cmd)
cmd=subprocess.run(cmd,
shell=True,
stdout=open(cmd+" stdout", 'w'),
stderr=open(cmd+" stderr",'w'),
bufsize=1
)
Я получаю сообщение об ошибке, что не закрываю файл = (
ResourceWarning: unclosed file <_io.TextIOWrapper name='ls -l stderr' mode='w' encoding='ANSI_X3.4-1968'>
bufsize=1
поэтому я попробовал
cmd.stdout.close()
cmd.stderr.close()
и он все еще не закрывает файл = (
это не испортит мою программу, я просто хочу убедиться, что закрываю свои файлы.
Спасибо!
Извините, я новичок в переполнении стека!






в этом случае не передавайте результат open процедуре, которая не собирается ее закрывать, так как вы потеряете дескриптор, это плохая практика. Вы не можете быть уверены в том моменте, когда мусор python соберет и закроет файл.
Ваша попытка не работает, вы пытаетесь закрыть другие объекты (cmd.stdout удобен при перенаправлении с subprocess.PIPE или subprocess.STDOUT).
Просто используйте диспетчер контекста и обработайте переменные:
with open(cmd+" stdout", 'wb') as fout, open(cmd+" stderr",'wb') as ferr:
cmd=subprocess.run(cmd,
shell=True,
stdout=fout,
stderr=ferr,
bufsize=1
)
при выходе из блока with перенаправленные файлы вывода / ошибок закрываются (на них не нужно вызывать close)
лень проверять но режим wb наверное нужен для python 3.
да ты прав, я не правильно поставил код, я случайно поставил то, что, как я думал, должно работать. Мне нравится ваша реализация, и я посмотрю на нее. Python3, похоже, имеет некоторые проблемы с этим материалом, поэтому я мог бы просто написать его на perl, но большое спасибо, это кажется интересным