๋ชฉ์ฐจ
ํ์ด์ฌ RuntimeError: lost sys.stdin ์ค๋ฅ ํด๊ฒฐ
Traceback (most recent call last):
File "calculate_daily_tax.py", line 41, in <module>
File "calculate_daily_tax.py", line 27, in main
RuntimeError: lost sys.stdin
์๋ ์๋ฌ๋ ์ฃผ๋ก PyInstaller๋ก --noconsole
(๋๋ --windowed
) ์ต์
์ ๊ฑธ์ด์ ์ฝ์ ์
์ถ๋ ฅ์ด ๋งํ๊ฑฐ๋, ํน์ IDE ๋ด์ฅ ํฐ๋ฏธ๋ ๋ฑ์์ sys.stdin
์ด ๋ซํ ์์ ๋ ๋ฐ์ํฉ๋๋ค.
RuntimeError: lost sys.stdin
์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋ ๊ฐ์ง์ ๋๋ค.
1. ์ฝ์ ๋ชจ๋๋ฅผ ํ์ฑํํ์ฌ exe ๋น๋ํ๊ธฐ
๊ฐ์ฅ ๊ฐ๋จํ ํด๊ฒฐ์ฑ ์ ์ฝ์ ์ ์ถ๋ ฅ์ด ๊ฐ๋ฅํ๋๋ก exe๋ฅผ ๋น๋ํ๋ ๊ฒ์ ๋๋ค.
# --noconsole ์ต์
์ ์ฐ์ง ์๊ณ , ๊ธฐ๋ณธ ์ฝ์ ๋ชจ๋๋ก ๋น๋
pyinstaller --onefile tax_calculator.py
์ด๋ ๊ฒ ํ๋ฉด exe ์คํ ์ input()
์ด ์ ์ ๋์ํฉ๋๋ค.
2. ์ฝ๋ ๋ด์์ stdin์ ๋ณต๊ตฌํ๋๋ก ์์ ํ๊ธฐ
๋ง์ฝ GUI ํ๋ก๊ทธ๋จ๊ณผ ๊ฐ์ด ์ฝ์์ด ์๋ ํ๊ฒฝ์์๋ ์
๋ ฅ์ ๋ฐ์์ผ ํ๋ค๋ฉด, input()
์ ์ง์ ๊ฐ์ธ์ sys.stdin
์ ์ด์ด ์ฃผ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋ค์์ safe_input()
ํจ์๋ฅผ ์ถ๊ฐํด, lost sys.stdin
์์ธ๊ฐ ๋ฐ์ํ๋ฉด Windows ์ฝ์ ํธ๋ค(CONIN$
)์ ๋ค์ ์ฌ๋ ๋ฐฉ์์ ์ํ์
๋๋ค.
#!/usr/bin/env python3
# filename: tax_calculator_safe.py
import sys
import os
def ensure_stdin():
"""
sys.stdin์ด ๋ซํ๊ฑฐ๋ ์์ค๋ ๊ฒฝ์ฐ,
Windows์ CONIN$๋ฅผ ํตํด ์ฝ์ ์
๋ ฅ์ ๋ณต๊ตฌํฉ๋๋ค.
"""
try:
if sys.stdin is None or sys.stdin.closed:
# Windows ์ ์ฉ: ์ฝ์ ํธ๋ค์ ์ด์ด stdin์ ๋ณต๊ตฌ
sys.stdin = open('CONIN$', 'r')
except Exception:
pass
def safe_input(prompt: str) -> str:
"""
input() ํธ์ถ ์ RuntimeError: lost sys.stdin ๋ฐ์ํ๋ฉด
stdin์ ๋ณต๊ตฌํ๊ณ ์ฌ์๋ํฉ๋๋ค.
"""
try:
return input(prompt)
except RuntimeError as e:
if 'lost sys.stdin' in str(e):
ensure_stdin()
return input(prompt)
raise
def calculate_daily_tax(daily_wage, work_days):
gross = daily_wage * work_days
deduction = 150_000 * work_days
taxable = max(gross - deduction, 0) # ๊ณผ์ธ์๋
basic_tax = taxable * 0.06 # ์ฐ์ถ์ธ์ก
reduced = basic_tax * (1 - 0.55) # ๊ฒฐ์ ์ธ์ก
final_tax = reduced * 1.1 # ์ง๋ฐฉ์๋์ธ ํฌํจ
return round(final_tax)
def main():
print("=== ์ผ์ฉ์ง ์๋์ธ ๊ณ์ฐ๊ธฐ (Safe Mode) ===")
try:
daily = int(safe_input("1. ์ผ๊ธ์ฌ๋ฅผ ์
๋ ฅํ์ธ์(์): ").replace(',', ''))
days = int(safe_input("2. ๊ทผ๋ฌด์ผ์๋ฅผ ์
๋ ฅํ์ธ์(์ผ): "))
except ValueError:
print("โถ ์ฌ๋ฐ๋ฅธ ์ซ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.")
return
tax = calculate_daily_tax(daily, days)
print("\n--- ๊ณ์ฐ ๊ฒฐ๊ณผ ---")
print(f"์ด ๊ธ์ฌ์ก : {daily * days:,}์")
print(f"์์ฒ์ง์์ธ์ก : {tax:,}์")
print("โป ์ธ์ก์ด 1,000์ ๋ฏธ๋ง์ด๋ฉด ์ง์๋์ง ์์ ์ ์์ต๋๋ค.")
if __name__ == "__main__":
main()
์ ์คํฌ๋ฆฝํธ๋ฅผ tax_calculator_safe.py
๋ก ์ ์ฅํ ๋ค, ์๋์ ๊ฐ์ด exe๋ก ๋น๋ํ์๋ฉด ๋ฉ๋๋ค.
pyinstaller --onefile --name ์ผ์ฉ์ง์ธ๊ธ๊ณ์ฐ๊ธฐ_safe tax_calculator_safe.py
- --onefile: ๋จ์ผ exe
- --name: exe ํ์ผ๋ช ์ง์
- (๊ธฐ๋ณธ): ์ฝ์ ์ฐฝ์ด ์๋์ผ๋ก ์ด๋ ค
input()
์ด ๊ฐ๋ฅํฉ๋๋ค.
์์ฝ
- ๊ฐ๋จํ:
--noconsole
์ต์ ์ ๋นผ๊ณ ์ฝ์ ๋ชจ๋๋ก ๋น๋ํ๋ฉดRuntimeError: lost sys.stdin
๋ฌธ์ ๊ฐ ์์ด์ง๋๋ค. - ์ฝ๋ ์์ :
safe_input()
์ฒ๋ผRuntimeError
๋ฅผ ์ก์์sys.stdin
์ ๋ณต๊ตฌํ๋ ๋ก์ง์ ์ถ๊ฐํ๋ฉด, ์ฝ์ ์๋ ํ๊ฒฝ์์๋ ์ ๋ ฅ์ ๋ฐ์ ์ ์์ต๋๋ค.
'Lect & Tip > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ผ์ฉ์ง ์๋์ธ ๊ณ์ฐ๋ฐฉ๋ฒ, ํ์ด์ฌ ์๋ ๊ณ์ฐ๊ธฐ ๋ง๋ค๊ธฐ (0) | 2025.04.25 |
---|---|
ํ์ด์ฌ ์ธ์คํ๊ทธ๋จ ์ฌ์ง ๋ค์ด๋ก๋ ์คํฌ๋ฆฝํธ ๋ง๋ค๊ธฐ (0) | 2025.04.24 |
๋๊ธ