추적 코드를 읽고, 웹 사이트에 추적을 게시 한 결과를보고 일부 메시지를 인쇄하고 반환 값을 갖는 스크립트를 만들고 있습니다. 다음은 파이썬 코드의 일부 :쉘 스크립트에서 외부 프로그램의 출력과 반환 값을 읽는 방법은 무엇입니까?
# update return True if there was a change to the .msg file
def update(cod):
msg = extract_msg(cod)
if msg == 'ERROR':
print('ERROR: invalid code\n')
sys.exit(2)
file = open('.msg', "r+")
old_msg = file.read()
if msg == old_msg:
return False
else:
print('Previous message: ' + old_msg)
print('Latest message: ' + msg)
file = overwrite(file, msg)
file.close()
return True
def main(argv):
if len(argv) > 1:
cod_rastr = argv[1]
else:
print("Error: no arg, no code\n")
return -1
# Verify if file exists
if os.path.isfile(".msg") == False:
arq = open('.msg', 'w')
arq.close()
# post() returns the source code of the resulting page of the posted code.
cod = post(cod_rastr)
if update(cod) == False:
return 0
else:
print ('\n Message!\n')
return 1
을 그리고 여기, 나뿐만 아니라 (최종 사용자)를 인쇄하지만 (조건부 사용) 반환 값을 읽고 싶어. 이 스크립트는 (내가은 crontab에서이 스크립트를 놓을 게요)이 평의 출력을 읽고 나에게 마지막 검사에서 업데이트가있는 경우에 이메일을 보내해야합니다
이#!/bin/bash
if [ -z "$1" ]; then
echo usage: $0 CODE
exit
fi
CODE=$1
STATUS=$(myscript.py $CODE 2>&1)
VAL=$?
FILE=$(<.msg)
# always prints 0 (zero)
echo $VAL
# I want to check for an existing update case
if [[ $STATUS == 'Message!' ]]
then
echo $STATUS
echo $FILE | mail [email protected] -s '$CODE: Tracking status'
fi
문제는 항상 $?
입니다 0
을 반환하고 내 문자열 검사는 if가 작동하지 않는다고 생각합니다. 왜냐하면 print()에서도 print() 변수를 가진 print를 읽었을 것이라고 생각하기 때문입니다. 파이썬 스크립트를 변경하지 않고 어떻게이 쉘 스크립트를 실행할 수 있습니까?
미리 감사드립니다.
... 전체 파이썬 스크립트입니까? 당신은'main'을 달리는 것처럼 보이지 않습니다. 스크립트가 독립적으로 작동합니까? 'sys.exit()'... – bryn
을 살펴보십시오. 앞에서 언급했듯이 관련 코드가 포함되어 있지 않습니다. 나는 주를 실행하고 스크립트는'requests' 모듈을 필요로합니다. 'sys.exit()'를 살펴보면 무엇을 의미합니까? – user3404142