2013-01-23 3 views
0

내가 어떻게 대처할 지 잘 모르겠다는 이상한 문제가 발생했습니다. 상대 경로를 사용하여 결과를 텍스트 파일에 기록하는 Python-selenium 스크립트가 있습니다. 당신이 볼 수 있듯이Python - 쉘에서 실행 중일 때와 다른 스크립트에서 실행 중일 때 경로를 다르게 해석합니까?

log_file = './demo-logfiles/log_file_template.txt' 
sys.stdout = open('log_file_template.txt', 'a',) 

, 그것은 폴더에 대한 상대 경로를 사용합니다 : 여기

로그 파일을 설정하는 스크립트의 일부입니다. 이 스크립트를 python demo.py firefox MAC 같이 실행하면 완벽하게 실행되고 로그 파일이 적절한 폴더로 전송됩니다.

더 큰 쉘 스크립트에서이 정확한 Python 스크립트를 실행하면 './demo-logfiles/log_file_template.txt'이라는 오류가 반환됩니다.

스크립트를 '../demo-logfiles/log_file_template.txt'으로 변경하면 더 큰 쉘 스크립트에서 작동하지만 정상적으로 실행하면 작동이 중지된다는 사실을 발견했습니다.

둘 중 하나에서 작동합니다. 상대 디렉토리가 다른 방식으로 해석되는 이유는 무엇입니까? 파이썬/쉘에서 실행하기위한 별도의 스크립트 두 개를 갖고 싶지 않습니다.

원래 파이썬 스크립트는 디렉토리 /blah/blah/DEMO/demo.py에 있으며, 그것이 내가이 문제가 내가 실행하려고 모든 스크립트에 대해 발생하는 것을 확인했다 /blah/blah/DEMO/demo-autotest/autotest_logger.sh

에 실행되는 쉘 스크립트. 원래의 파이썬 코드를 쉘 스크립트에서 작동하도록 변경하면 안된다. 나는 쉘 스크립트에서 이미 그것을 설명하고 파일을 성공적으로 실행한다.

감사합니다.

+0

큰 스크립트에서 스크립트를 어떻게 부르시겠습니까? 다른 스크립트가 한 레벨 위의 디렉토리에 있습니까? –

+0

@JustinEthier는 제 편집을 말합니다. – KamilS

답변

3

"." 이 실제로 인 경우를 제외하고는 스크립트의 디렉토리 경로에서 다른 경로 (또는 상대 경로)를 사용하여 사용자가 스크립트를 실행하는 디렉토리를 참조한다는 의미입니다. 당신이 실행중인 스크립트에 대한 상대적인 위치를 참조하려면 다음을 수행 할 수 있습니다

import os 
import sys 
directory = os.path.dirname(os.path.abspath(__file__)) 
sys.stdout = open(os.path.join(directory, "demo-logfiles", "log_file_template.txt"), "a") 

모범 사례 측 참고 : 당신은 아마 오히려 sys.stdout를 재 할당보다 logging 모듈을 사용해야합니다.

+1

감사합니다. 도움에 감사드립니다! – KamilS

2

"상대 디렉터리"라는 용어는 경로가 상대적인 것을 의미합니다. 경로가 포함 된 스크립트와 관련이 있다고 가정하지만 올바른 것은 아닙니다.

상대 경로는 스크립트를 해석하는 프로세스의 현재 디렉토리, 즉 python을 시작한 폴더에 대한 상대 경로입니다. 당신이 쉘에 있다면 당신은 /blah/blahpython을 시작하면, 당신은 echo $PWD

와 현재 디렉토리를 볼 수있다, 그 다음은 현재 디렉토리가 모든 상대 경로는 /blah/blah를 기준으로합니다.

현재 스크립트의 경로를 얻는 방법과 그에 관련된 경로를 작성하는 방법은 answer of David Hollman을 참조하십시오.

+0

이것은 나를 위해 일을 깨끗이합니다. 고마워요. – KamilS

관련 문제