>source

절대로 Powershell 스크립트를 만들었거나 그런 것과 같은 것을 만들지 못했습니다. 그래서 나는 내가해야 할 일이 모두 그것을 사용하는 것이라고 생각한 이후로 python에서 명령을 실행하려고 노력하는 이유입니다.os.popen ()명령.

그래서 내가 다운로드 한 스크립트를 사용하여 키포인트를 추출하려는 이미지를 포함하는 5000 개의 폴더가 모두 포함되어 있습니다.

그래서 Python 스크립트를 실행하려고 시도했을 때 아무 것도 표시되지 않습니다. 명령을 실행할 때 표시 할 키포인트가있는 이미지가 포함 된 창이 있지만 아무 것도 표시되지 않습니다.

하나의 폴더에서 PowerShell 명령을 시도했으며 완벽하게 작동합니다.

여기 내 스크립트가 있습니다.

import os
import sys
import time
os.chdir(r'C:\Users\Adam\Downloads\openpose-1.7.0-binaries-win64-cpu-python3.7-flir-3d\openpose')
for root, dirs, files in os.walk(r'C:\Users\Adam\Downloads\LIP_MPV_256_192\MPV_256_192\all\all\images\train'):
    for d in dirs:
        print('got here')
        os.popen('bin\\OpenPoseDemo.exe --image_dir'+' C:\\Users\\Adam\\Downloads\\LIP_MPV_256_192\\MPV_256_192\\all\\all\\images\\train\\'+d+'--write_json'+' C:\\Users\\Adam\\Downloads\\LIP_MPV_256_192\\MPV_256_192\\all\\all\\images\\pose_coco\\train\\'+d)
        time.sleep(5)

os.chdir ()은 모호한 것으로 보입니다. 해당 디렉토리에 없으면 바이너리가 작동하지 않습니다.

tripleee2021-05-05 12:51:21
  • 답변 # 1

    함께 시도 할 수 있습니다 서브 프로세스파이썬 표준 라이브러리에서 모듈 :

    import os
    import
    subprocess
    import time
    os.chdir(
        r"C:\Users\Adam\Downloads\openpose-1.7.0-binaries-win64-cpu-python3.7-flir-3d\openpose"
    )
    for root, dirs, files in os.walk(
        r"C:\Users\Adam\Downloads\LIP_MPV_256_192\MPV_256_192\all\all\images\train"
    ):
        for d in dirs:
            print("got here")
            command= [
                "bin\\OpenPoseDemo.exe",
                "--image_dir",
                " C:\\Users\\Adam\\Downloads\\LIP_MPV_256_192\\MPV_256_192\\all\\all\\images\\train\\" + d,
                "--write_json",
                " C:\\Users\\Adam\\Downloads\\LIP_MPV_256_192\\MPV_256_192\\all\\all\\images\\pose_coco\\train\\"
                + d
            ]
            subprocess.run(args=command, shell=False, capture_output=True)
            time.sleep(5)
    

    shell= false 사용 명령은 문자열이 아닌 목록이어야합니다. Windows는 이에 덜 민감하지만 명령 줄을 토큰 목록으로 분리하는 것이 덜 오류가 발생합니다.

    tripleee2021-05-05 12:51:21

    SubProcess.Run은 os.popen ()이 (이제) SubProcess.popen ()에 대한 별칭만을 언급 할 수 있지만, 아마도 언급 될 수 있습니다. 상위 레벨 run () 함수를 사용하면 병렬 처리와 같이 실행이 수용 할 수없는 동작이 필요하지 않으면, 실행중인 하위 프로세스 주위에 추가적인 하우스 키핑을 수행 해야하는 동작이 필요하지 않으면 절대로 권장됩니다. ...에

    tripleee2021-05-05 12:51:21

    @tiplee, 실제로, 나는 내 대답을 수정했다. 또한 이러한 설명 및 추가 정보에 감사드립니다.

    Laurent2021-05-05 12:51:21

    고마워요.

    user109761832021-05-04 14:49:30
  • 이전 javascript : HTTP 가져 오는 오류를 수정하는 방법 : ... 404 (발견되지 않음)
  • 다음 python : 일 수를 수년로 변경하는 기능