ไพพ์เอาต์พุตของสคริปต์ทุบตีหลังจากเปลี่ยนเส้นทาง stderr [ปิด]


9

เพราะวิธีที่ผู้ให้บริการทำสิ่งที่ฉันต้องใช้ระบบสำหรับบริการ

บริการนี้มีไฟล์ที่เรียกใช้ซึ่งจะเรียกใช้และไพพ์ลงในไฟล์รันที่สอง แต่ฉันใช้แพ็กเกจหลาม (ที่ได้รับ) ที่บันทึกไปยัง stderr แทนที่จะเป็น stdout และฉันไม่สามารถทำสิ่งที่ฉันต้องการได้

ดังนั้นฉันจึงมีสคริปต์รันสำหรับบริการของฉัน:

#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py

ซึ่งถูกไพพ์ไปที่การรันของระบบการบันทึก:

#!/bin/sh
exec multilog t ./main

แต่ท่อไม่ได้เชื่อมต่อ stderr (ตามที่คาดไว้) ดังนั้นหลังจาก googling ฉันผนวกการเปลี่ยนเส้นทางไปยังการทำงานของฉัน:

#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1

แต่สิ่งนี้ไม่ช่วยแก้ปัญหาของฉัน: ผลลัพธ์ของฉัน (ไปยัง stdout โดยใช้การพิมพ์ pythons) จะถูกบันทึกตามที่คาดไว้ เอาต์พุต stderr ไม่ถูกบันทึก

หากฉันเปลี่ยนเส้นทางของสคริปต์ที่แก้ไขให้เป็นสองไฟล์แสดงว่าไม่มีการเปลี่ยนเส้นทาง (stderr ยังคงอยู่ใน stderr) ฉันจะต้องแก้ไขการเปลี่ยนเส้นทางให้ทำงานได้อย่างไร


5
exec ... 2>&1ไม่ได้รวมข้อผิดพลาดมาตรฐานในมาตรฐานออก ดังนั้นอย่างอื่นที่ผิดพลาด
thrig

3
มีโอกาสที่สคริปต์ python ปิด stderr และเปิดใหม่เป็นไฟล์หรือไม่ มองหาการโทรไปที่dup2()ในรหัส ความคิดใดที่ผลลัพธ์ stderr จะเป็นอย่างไร ความคิดอื่น: บางทีไฟล์เรียกใช้ของ hoster ของคุณกำลังเปลี่ยนเส้นทาง stderr ด้วยวิธีนี้ก่อนเริ่มรหัสของคุณ
Edward Falk

1
คุณสามารถยืนยันข้อความที่ถูกส่งไปยัง stderr ได้หรือไม่? แทนที่สคริปต์ด้วยสคริปต์ที่import sys; print("Hello, stderr", file=sys.stderr)แจ้งว่าแน่ใจ
rosuav

3
stderr จริงเหรอ? ลองทำสิ่งนี้exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.logและดูไฟล์บันทึกนี้
ingopingo

2
จะเกิดอะไรขึ้นถ้าคุณใช้ bash แทน sh
Luciano Andress Martini

คำตอบ:


0

กรุณาลอง:

#!/usr/bin/env bash
exec 2>&1
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py

เช่น: exec 2>&1ในบรรทัดแยกกันบอกให้เปลี่ยนเส้นทาง stderr ไปยังสิ่งเดียวกัน stdout กำลังจะไป (เทอร์มินัลของคุณหรือเมลใน crontab?) ตามด้วย cd & exec เพื่อแทนที่กระบวนการที่มีอยู่ด้วย python3.2 โปรดทราบว่าฉันเปลี่ยนเป็นทุบตีแทน sh เพื่อความสะดวกในการพกพาที่ต่ำกว่า หากได้ผลดีมากถ้าไม่มีคนที่มีความรู้ดีกว่าจะเข้ามา (ฉันไม่มีเวลาทำวิจัยเลยในตอนนี้)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.