Python2.7&bash-fork:内核是用OpenSuse转储的,而不是用Ubuntu转储的

2024-06-16 11:25:18 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的python程序中,我使用Vte终端来派生bash脚本,通过按钮调用。 bash脚本使用wget在互联网上下载一些视频(电视重播下载程序)

import vte

def download(self, dPluzz, donnees=None):
    [...]
    print list_com2 
    self.child_pid = self.v.fork_command(None, list_com2)
    if self.child_pid == -1:
        self.child_pid = self.v.fork_command("/bin/bash", list_com2)
    print self.child_pid

程序在*buntu、14.xx或16.04下运行良好,bash脚本被调用并运行。 当这个程序在OpenSuse上启动时,问题就来了(Tumbleweed,没有尝试其他版本)。 我丢了一个核,窗户关上了:

> python /usr/share/dPluzz/dPluzz.py
['/bin/bash', '/usr/share/dPluzz/dPluzz-cli.sh', '--video-codec', 'copy', '--audio-codec', 'aac', '-d', '/home/guillaume/T\xc3\xa9l\xc3\xa9chargements/', '-u']
2299
Erreur de segmentation (core dumped)

下面是bash脚本的开始(不是我写的,我们是2个开发人员):

#!/bin/bash
#set -v -x
################################################################################
#
# Version: 1.2.0
# Name: revoir-cli.sh
# Last modification: 2016/09/12
#
# -------------------------------------- HISTORY -------------------------------
#
# 2016/02/25 (0.9.0): Fusion de dPluzz et dCplus développés principalement par Matthieugoua, melixgaro, gaara
#                     Merci aussi à Lulux3
#                     Voir ces scripts pour leur propre historique [melixgaro]
#
# 2016/08/29 (1.0.0): Libération officielle
#                     Désactivation des tests sur la disponibilité des codecs dans avconv/ffmpeg car non fiables
#
# 2016/09/10 (1.1.0): Réparation des chaînes C8 (ex-D8), CStar (ex-D17), NRJ12, Cherie25, Gulli
#
# 2016/09/12 (1.2.0): Prise en charge de TV5 Monde+ et TV5 Monde+ Afrique
#
#-------------------------------------- DEPENDANCIES ---------------------------
#
# avconv (sudo apt-get install --no-install-recommends libav-tools)
# ou bien
# ffmpeg (sudo apt-get install --no-install-recommends ffmpeg)
#
################################################################################

# Workaround for grep 2.21 or later
export LC_ALL=C


# Traps
kill_jobs()
{
    pkill -TERM -P "$BASHPID"
}

#trap kill_jobs EXIT

# Script variables
version="1.2.0"

################################################################################

# Color definition
export black_fgc="\e[7;0;31m"
export red_fgc="\e[7;0;31m"
export green_fgc="\e[0;32m"
export yellow_fgc="\e[0;33m"
export blue_fgc="\e[1;34m"
export magenta_fgc="\e[0;35m"
export cyan_fgc="\e[0;36m"
export white_fgc="\e[0;37m"
export default_fgc="\e[0;39m"

################################################################################

# Flagging functions
debug_flagger ()
{
    echo "$(date +"%d/%m/%Y %H:%M:%S") [DEBUG]    "
}

info_flagger ()
{
    echo "$(date +"%d/%m/%Y %H:%M:%S") [INFO]     "
}

warning_flagger ()
{
    echo "$(date +"%d/%m/%Y %H:%M:%S") [WARNING]  "
}

critical_flagger ()
{
    echo "$(date +"%d/%m/%Y %H:%M:%S") [CRITICAL] "
}

logger ()
{
    cr='
'
    while read line
    do
    case "${1}" in
        "debug")
        echo -e "${blue_fgc}$(debug_flagger)${line}${default_fgc}" >&2
        ;;
        "info")
        echo -e "${green_fgc}$(info_flagger)${line}${default_fgc}" >&2
        ;;
        "warning")
        echo -e "${yellow_fgc}$(warning_flagger)${line}${default_fgc}" >&2
        ;;
        "critical")
        echo -e "${red_fgc}$(critical_flagger)${line}${default_fgc}" >&2
        ;;
    esac
    done <<< "${2//\\n/${cr}}"
    if [[ "${1}" == "critical" ]]
    then
    exit 1
    fi
}

exit_if_empty ()
{
    if [[ ${#1} -eq 0 ]]
    then
    logger critical "${2}"
    fi
}

sanitize ()
{
    # echo "${1}" | recode h4..latin1 | sed 's+^[[:blank:]]*++g' | sed 's+[[:blank:]]*$++g' | sed 's+[[:blank:]]\{1,\}+_+g' | iconv -f utf-8 -t ascii//translit | sed 's/[\&"!?;]/_/g' | sed 's/[^[:alnum:]-]/_/g' | sed 's/_\{2,\}/_/g' | sed 's/-\{2,\}/-/g' | sed 's/_-/-/g' | sed 's/^_*\([^_].*[^_]\)_*/\1/g' | sed 's/.*/\u\0/g' | sed 's/^-*//g'
    echo "${1}" | perl -MHTML::Entities -alne 'print(decode_entities($_))' | sed 's+^[[:blank:]]*++g' | sed 's+[[:blank:]]*$++g' | sed 's+[[:blank:]]\{1,\}+_+g' | perl -Mutf8 -MText::Unidecode -alne 'use open ":std", ":encoding(utf-8)"; print(unidecode($_));' | sed 's/[\&"!?;]/_/g' | sed 's/[^[:alnum:]-]/_/g' | sed 's/_\{2,\}/_/g' | sed 's/-\{2,\}/-/g' | sed 's/_-/-/g' | sed 's/^_*\([^_].*[^_]\)_*/\1/g' | sed 's/.*/\u\0/g' | sed 's/^-*//g'
}

progressfilt ()
{
    local line=""
    local prev_progression=0
    while read line
    do
    progression=$(grep -oE "[0-9.]{1,}%" <<< "${line}" | sed 's/%//g' | awk '{if ($1 ~ /[0-9]/) {printf "%6.2f", $1} else {printf "%6.2f", 0}}')
    if [[ "${progression}" != "${prev_progression}" && ${#progression} -ne 0 ]]
    then
        prev_progression=${progression}
        echo -ne "\e[F" >&2
        logger info "Progression: ${progression}%"
    fi
    done
}

我试图补充 time.sleep(1)在调用bash脚本之前,也尝试过 sleep(1)在bash脚本中,但是没有办法,崩溃追加

我怎样才能看到问题并解决它

项目的启动板页:https://launchpad.net/~yoggic/+archive/ubuntu/dpluzz/+packages


Tags: echoself脚本bashdefaultiflineexport