2017-10-13 9 views
0

필자는 Python 프로그램을 작성했습니다. 프로그램에 대한 Windows 바로 가기를 작성하고 바로 가기를 실행할 때 소프트웨어가 실행될뿐만 아니라 바로 가기가 현재 디렉토리인지 확인하는 것이 좋습니다. at는 sys.argv으로 전달 될 것이므로 프로그램에서 무엇인가 할 수 있습니다. Windows 단축키의 경우 다음과 같이 할 수 있습니다.Windows 바로 가기 대상에서 현재 디렉토리를 전달하는 방법은 무엇입니까?

"C:\Documents and Settings\Administrator\Desktop\hello.py" --somevalue 

대상에 인수로 전달할 수 있습니다. 내 구체적인 경우에 어떻게 작동하게 할 수 있을지 궁금하다. 예를 들어, 바탕 화면에 바로 가기를 놓고 바로 가기를 실행하면 Python 소프트웨어는 sys.argv[1]="C:\Users\username\Desktop"으로 시작합니다.

+0

인수로 전달할 방법이 없다고 생각합니다. 현재 디렉토리 (['os.getcwd()'] (https://docs.python.org/3/library/os.html#os.getcwd)로 얻을 수있는 현재 디렉토리는 필요 없습니다. 스크립트 자체). 당신이 필요로하는 것은 그것이 바로가 아니라 바로 가기에서뿐만 아니라 사용 된 지름길의 위치를 ​​탐지 할 수있는 방법입니다. 나는 그것이 가능하다는 것도 의심한다. – martineau

+0

어쨌든이 정보가 필요한 이유가 무엇입니까? – martineau

+0

바로 가기에서 현재 작업 디렉토리를 설정할 수 있습니다. 명령 줄 매개 변수로 전달할 필요가 없습니다. – IInspectable

답변

2

실행 된 응용 프로그램의 현재 디렉토리를 .LNK로 지정할 수 있습니다. 이는 특정 디렉토리에 의존하는 경우 일을하는 일반적인 방법입니다.

경우 몇 가지 이유는 실제로 당신이 (내가 가정 ctypes 사용) GetStartupInfo 윈도우 함수를 호출해야 .LNK에 대한 정보를 얻을 필요하고 STARTF_TITLEISLINKNAME 비트가 STARTUPINFO.dwFlags에 설정되어있는 경우 다음 STARTUPINFO.lpTitle는 .LNK의 경로를 포함하기위한 사용자가 응용 프로그램을 시작하는 데 사용됩니다.

+1

ctypes는 어렵지 않지만 PyWin32를 설치하면 더 쉽습니다 :'import win32process;''STARTF_TITLEISLINKNAME = 0x800;''si = win32process.GetStartupInfo();''linkname = si.lp si.dwFlags & STARTF_TITLEISLINKNAME이면 표제 없음 '. – eryksun

+0

@eryksun 조언을 해주셔서 고마워요.하지만 이걸 시도해 봤는데 linkname = None을 반환합니다. 직접 또는 단축키 –

+0

@ 한성 리를 통해 액세스하려고 시도했을 때 항상 .py 확장자가 py [w] .exe와 연결되어 있습니다. 발사통. 자식 프로세스로 python [w] .exe를 실행하고,'lpTitle'을'NULL '로 생성합니다.이 프로그램은 python [w] .exe 실행 경로를 제목으로 사용합니다. 이것은'STARTF_TITLEISLINKNAME' 플래그를 가지지 않을 것입니다. 위의 표현식이'linkname'을'None'으로 설정하는 이유입니다. 시작 프로그램이'GetStartupInfo'를 호출하여 자체 시작 정보에서 일부 세부 사항을 프록시 할 수 있다고 가정합니다. 이 문제를 해결하려면 스크립트를 인수로 사용하여 python [w] .exe (즉'sys.executable ')의 정규화 된 경로를 사용하여 바로 가기를 만들어야합니다. – eryksun