2014-08-29 3 views
1

나는 그와 관련된 Windows net use cmd에서 줄만 가져오고 싶습니다.Windows net use 줄 바꿈

output = subprocess.Popen('net use', stdout=subprocess.PIPE).communicate() valid_lines = [ line.strip() for line in output[0].split('\r\n')] valid_lines = valid_lines[6:-3] print "output", valid_lines

샘플 인터넷 사용 : enter image description here

출력 [ 'Getrennt \\ 192.168

UNC 경로가 긴 그물을 사용하는 경우는 줄 바꿈을

내 코드 않습니다. 1.111 \ bze \ export ','Microsoft Windows 네트워크 ', '확인 \\ master \ bze \ export Microsoft Windows 네트워크 ']

전에서와 같이, 첫 번째 라인에서 출력하고 싶은 'OK .....'

들으

+0

상황을 잘 설명해 주셨습니다. "Getrennt"줄과 다음 줄을 병합하는 프로그램을 작성하고 싶습니다. 그럼에도 불구하고 귀하의 게시물에는 핵심 요소가 빠져 있습니다. 구체적인 질문이 있으십니까? –

+1

net 명령의 텍스트 출력을 구문 분석하는 대신 코드 ('WNetOpenEnum' /'WNetEnumResource')를 통해 직접 매핑 된 네트워크 연결을 쿼리하는 것이 좋습니다. –

답변

0

앤드류 메디가 지적 하듯이, 거기에 이것에 대한 API를하고, 가능한 경우 인간을 위해 포맷 된 입력을 파싱하려고 시도하는 것보다 프로그램에 정보를 반환하도록 설계된 함수를 호출하는 것이 훨씬 낫습니다. 왜냐하면 후자가 지나치게 복잡 할 수 있기 때문입니다 (여기에서 보듯이 또는 모호 할 수도 있습니다).

하지만 이것은 가능합니다. 줄 계속을 위해 규칙이 무엇인지 알아야합니다.

규칙은 매우 단순한 것처럼 보입니다. 첫 번째 열이 비어 있으면 선은 이전 행의 연속입니다. 당신이 초보자로는 이해할 수없는 만들기의 위험이 더 간결하고 itertools.groupby와 많은 더 많은 읽을 수있는, 그래서 명시 적 루프와 함께 갔다 할 수

prev_line = '' 
for line in valid_lines: 
    if line[0]: 
     if prev_line: 
      print prev_line 
     prev_line = '' 
    else: 
     prev_line += line 

: 그렇다면

.

호환 연속 줄 형식을 사용하는 프로토콜에 대해 파서를 악용하여 속일 수 있습니다. 예 : rfc822 모듈. 그러나 궁극적으로 그것은 아마 적은 것보다는 더 많은 일을하고있을 것입니다.

+2

@abarnett, 비어있는 첫 번째 열은 줄 연속을 의미하지 않습니다. 내 PC에서이 명령을 실행했고 상태 열은 여러 항목에 대해 비어 있습니다. 적어도 필자의 경우에는 원격 열과 네트워크 열이 항상 채워지는 것으로 나타났습니다. – user3885927

+0

@ user3885927 : 도움이되는 정보, 감사합니다. 그러나 규칙이 무엇이든간에 일단 코드를 이해하면 코드를 작성하기 쉽습니다. OP가 다른 사람이 'net use'의 출력을 위해 문법을 리버스 엔지니어하기를 원한다면 그것은 정말 문제가 아니며 파이썬 프로그래밍 문제는 훨씬 적습니다 ... – abarnert

0

이것은 좋은 질문입니다. OS에서 WMIC 명령을 지원한다면이 방법을 사용하는 것이 좋습니다. 나는 Windows XP에서이 기능을 지원하지만 특정 시스템을 확인할 수 있습니다. WMIC을 사용하면 출력을 CSV로 포맷 할 수 있으며 신뢰할 수있는 정보를 얻을 수 있습니다. 샘플 코드는 다음과 같습니다.

import subprocess 
output = subprocess.Popen('wmic netuse list /format:csv', stdout=subprocess.PIPE).communicate() 
valid_lines = [ line.strip() for line in output[0].split('\r\n')] 
#If you don't want the header use 2: instead of 1: 
myData=[line.split(',') for line in valid_lines][1:]