할로윈이니까 파이썬한테 가보라고 해.
주: 이 글의 내용은 농담입니다.초래한 손실에 대해 일체 책임을 지지 않는다.
앞말
무의식중에 파이썬 참조를 읽고 다음과 같은 기록을 발견하였다.
sys.ps1과sys.ps2 변수는 주 프롬프트와 보조 프롬프트에 표시되는 문자열을 정의합니다.
>>>
>>> import sys
>>> sys.ps1
'>>> '
>>> sys.ps2
'... '
>>> sys.ps1 = 'C> '
C> print('Yuck!')
Yuck!
C>
아, 힌트의 표시가 바뀌나요?이것은 이미 놀 수밖에 없다.결론적으로 말하면
결론적으로 말하면 다음과 같은 악작극을 했다.
평소처럼 대화 환경을 가동하면 지루하다.
코드
나는 아래와 같은 각본을 썼다.
이 중
trick_init.py
을 실행하면 필요한 파일을 생성합니다.trick_init.py
import sys, os
from exec_meta import get_info, do_cmd, write_lines_to_file
_DIR_PATH = os.path.dirname(os.path.abspath(__file__)) + r'\trick_work'
def make_fake_python():
real_python_path = get_info('where python')[0]
real_python_message = '\n'.join([
sys.version, 'Type "help", "copyright", "credits" or "license" for more information.'
])
write_lines_to_file(_DIR_PATH + r'\prompt.txt',
'hogeeeeeeeeeeeeeeeeeeeeeee ',
'fugaaaaaaaaaaaaaaaaaaaaaaa '
)
write_lines_to_file(_DIR_PATH + r'\trick.py',
'dir_path = r"{}" '.format(_DIR_PATH),
'with open(dir_path + r"\\prompt.txt", "r") as f: ',
' try: ',
' __import__("sys").ps1 = next(f).rstrip("\\n") ',
' __import__("sys").ps2 = next(f).rstrip("\\n") ',
' except: ',
' pass ',
' ',
'if __import__("os").path.isfile(dir_path + r"\\message.txt"): ',
' with open(dir_path + r"\\message.txt", "r") as f: ',
' print(f.read()) ',
'else: ',
' print("""\\\n{}""")' .format(real_python_message),
' ',
'del dir_path, f '
)
write_lines_to_file(_DIR_PATH + r'\python.bat',
'@echo off',
real_python_path + r' -i {}\trick.py'.format(_DIR_PATH),
'exit /b'
)
def main():
do_cmd('mkdir {} > NUL 2>&1'.format(_DIR_PATH), ignoring_error=True)
make_fake_python()
if __name__ == '__main__':
main()
exec_meta.pyfrom subprocess import check_output, check_call, call
def get_info(cmd, char_code='shift-jis'):
return [
b_line.decode(char_code).rstrip()
for b_line in check_output(cmd.split(), shell=True).split('\n'.encode(char_code))
if b_line
]
def do_cmd(cmd, *, ignoring_error=False):
if ignoring_error:
call(cmd, shell=True)
else:
check_call(cmd, shell=True)
def write_lines_to_file(file_path, *lines):
with open(file_path, 'w') as f:
f.writelines(
map(lambda x: x + '\n', lines)
)
엉망진창으로 쓰인 더러운 코드지만 이걸 실행하면 이 파일들을 만들 거예요.(곳곳에 개인 정보가 숨겨져 있다)
python.bat
@echo off
C:\ProgramData\Miniconda3\python.exe -i C:\...\trick_work\trick.py
exit /b
trick.pydir_path = r"C:\...\trick_work"
with open(dir_path + r"\prompt.txt", "r") as f:
try:
__import__("sys").ps1 = next(f).rstrip("\n")
__import__("sys").ps2 = next(f).rstrip("\n")
except:
pass
if __import__("os").path.isfile(dir_path + r"\message.txt"):
with open(dir_path + r"\message.txt", "r") as f:
print(f.read())
else:
print("""\
3.6.0 |Continuum Analytics, Inc.| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)]
Type "help", "copyright", "credits" or "license" for more information.""")
del dir_path, f
prompt.txthogeeeeeeeeeeeeeeeeeeeeeee
fugaaaaaaaaaaaaaaaaaaaaaaa
그리고 이python.단지bat을 참조 우선도가 진짜보다 높은 곳에 두었을 뿐이다.prompt.txt의 내용은 자유롭게 개작할 수 있다.
텍스트 편집기 따위로 마음대로 편집하면 재미있겠지.
또한 자동으로 생성되지는 않았지만 메시지.txt를 놓으면 내용을 사용합니다.
예:...
message.txt
-[------->+<]>.+[-->+<]>++.---[->+++<]>+.[->+++++<]>-.---[->++++<]>-.----.+++..+++++++.-[-->+++++<]>.------------.-[--->++<]>-.+++++++++++.+[--->+<]>.-[->+++<]>+.+[---->+<]>+++.[->+++<]>+.-[->+++<]>.-[--->++<]>.+++++.----.------.[->+++<]>-.>++++++++++.++[->++++++<]>.[--->++++<]>+.-[++>-----<]>..+++++++++.-[---->+<]>++.++++[->++<]>.[--->++++<]>+.+++++++++++..+++.++++++++.[->+++<]>..+++++++++.-[->+++++<]>.
이렇게 소탈한 정보를 표시합니다.
게임이 끝나면
python.그냥 bat 꺼.이렇게 되면 원래의 Python을 사용할 수 있게 된다.
Reference
이 문제에 관하여(할로윈이니까 파이썬한테 가보라고 해.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/LouiS0616/items/b26883cdb9c51e1f986f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)