python은 Windows 플랫폼의 경로에 공백이 있는 문제를 해결합니다.
예를 들어 Aapche의 설치 경로는 D:\Program Files\Apache Software Foundation\Apache2.2입니다.
아파치를 수집하려면 프로필 D:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd를 읽어야 합니다.conf
일부 D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd를 실행합니다.exe-v 이런 명령.
프로필을 읽는 데는 문제가 없습니다. 왜냐하면python 코드를 사용해서 파일을 열고, 파일을 읽고, 한 줄씩 훑어보고, 정규 일치나 문자열을 비교하면 정보를 얻을 수 있습니다. 예를 들어 프로필을 읽고 포트 번호를 얻는 것입니다.
port_list=[]
with open(httpd_conf, "r") as f:
file_list = f.readlines()
regex = ur"^Listen\s*(\S*?:)*(\d+)\s*$"
pattern_listener = re.compile(regex)
for item in file_list:
listener_list = pattern_listener.findall(item)
if listener_list:
for port_info in listener_list:
if port_info:
port = port_info[1]
if port and port.strip():
port_list.append(port.strip())
다음은 D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd입니다.exe-v 명령을 통해 정보를 얻을 수 있습니다.httpd.exe-v는apache의 버전 정보를 가져옵니다.cmd 명령줄에 직접 입력하면 다음과 같이 표시됩니다.
D:\>D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe -v
'D:\Program'은 내부 또는 외부 명령이 아니며 실행 가능한 프로그램이나 일괄 처리 파일도 아닙니다.
빈칸 문제가 있어서 검색해 보니 비교적 좋은 해결 방법은 명령을 쌍인용부호로 일으키는 것이다. 아래의 두 가지 작법은 모두 가능하다.
D:\>"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" -v
Server version: Apache/2.2.22 (Win32)
Server built: Jan 28 2012 11:16:39
D:\>"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" "-v"
Server version: Apache/2.2.22 (Win32)
Server built: Jan 28 2012 11:16:39
다음으로 우리는python에서 os를 사용합니다.popen().read () 어떻게 하는지 시험해 보세요.
>>> import os
>>> cmd='"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" -v'
>>> os.popen(cmd).read() -- , \ , r ,cmd cmd1
''
>>> cmd --\b , \x08
'"D:\\Program Files\\Apache Software Foundation\\Apache2.2\x08in\\httpd.exe" -v'
>>> cmd1=r'"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" -v'
>>> cmd1
'"D:\\Program Files\\Apache Software Foundation\\Apache2.2\\bin\\httpd.exe" -v'
>>> os.popen(cmd1).read()
'Server version: Apache/2.2.22 (Win32)
Server built: Jan 28 2012 11:16:39
'
>>>
다음은 비교적 복잡한 명령을 다시 보겠습니다, httpd.exe "-V | find"서버 MPM "이것은 아파치의 실행 모드를 가져오는 데 사용됩니다. 윈도우즈 아래는WinNT, 아까의 방식대로 cmd 명령줄에서 실행하는 것은 문제없습니다.
D:\>"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe"-V|find "Server MPM"Server MPM: WinNT
그럼, 우리는 계속 그를python에 이식하고, 계속os를 사용합니다.popen().read().결과는 아래와 같이 결과가 나오지 않는다.
그러니까 이런 파라미터가 비교적 많은데 이런 방법을 쓰면 안 된다.
>>> cmd1=r'"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" -V|find "Server MPM" '
>>> os.popen(cmd1).read()
''
>>> cmd2=r'"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" -V|find Server MPM '
>>> os.popen(cmd1).read()
''
>>> cmd3=r'"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" "-V|find Server MPM" '
>>> os.popen(cmd1).read()
''
관련 자료를 조회한 후subprocess를 사용할 수 있습니다.os 대신 Popen () 을 사용합니다.popen () 이 방법,그러나 집행 후 나온 결과는 원하는 것이 아니기 때문에 이 방법도 효과를 거둘 수 없다(아래).
>>> import subprocess
>>> cmd=r'D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe -V|find "Server MPM"'
>>> cmd
'D:\\Program Files\\Apache Software Foundation\\Apache2.2\\bin\\httpd.exe -V|find "Server MPM"'
>>> ps = subprocess.Popen(cmd)
>>> Server version: Apache/2.2.22 (Win32)
Server built: Jan 28 2012 11:16:39
Server's Module Magic Number: 20051115:30
Server loaded: APR 1.4.5, APR-Util 1.4.1
Compiled using: APR 1.4.5, APR-Util 1.4.1
Architecture: 32-bit
Server MPM: WinNT
threaded: yes (fixed thread count)
forked: no
이러한 결과를 보고 괴로움을 포기하고 최종적으로 곡선 구국 방안을 선택했고python의os모듈로 httpd에 선진적으로 들어갔다.exe가 있는 디렉터리입니다. 그 다음에 명령을 실행합니다.
>>> homepath="D:\Program Files\Apache Software Foundation\Apache2.2"
>>> BinPath = os.path.join(homepath, 'bin')
>>> os.chdir(BinPath)
>>> apache_model = os.popen('httpd.exe -V |find "Server MPM"').read()
>>> print apache_model
Server MPM: WinNT
추가 지식:python 윈도우즈에서 경로를 얻을 때 중국어 처리가 있습니다윈도우즈에서 os,path를 사용합니다.abspath(__file__)중국어 경로가 있을 때, 기본값은 비unicode 형식으로 바뀝니다.
이로 인해 다른 모듈에서 이 경로를 사용할 때 보고됩니다.
utf8' codec can't decode byte 0xb7 in position 14: invalid start byte
어떻게 처리할까요?
인터넷에서 바이두를 하나 만들었는데 해결 방법이 모두 타당하지 않으니 그래도 비통용적인 것이 좋겠지만 사용하기 쉽다.
아래와 같다
project_path = os.path.abspath(__file__.decode('gbk'))
이 방법으로 간단하고 편리하다.
자, 이상의python은 Windows 플랫폼의 경로에 빈칸이 있는 문제를 해결하고자 합니다. 바로 편집자가 여러분에게 공유한 모든 내용을 참고하고 저희를 많이 사랑해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.