指定された実行可能ファイルが実行されているかどうかをチェックするこのサブプロセス関数を、Python 2と3の両方で機能するように変更するにはどうすればよいですか?

BlandCorporation

実行可能ファイルが実行されているように見えるかどうかをテストするために使用される小さな関数があります。コマンドps -Asubprocessモジュールを使用してブール値を返します。

def running(program):

    results = subprocess.Popen(
        ["ps", "-A"],
        stdout = subprocess.PIPE
    ).communicate()[0].split("\n")

    matches = [
        line for line in results if program in line and "defunct" not in line
    ]

    if matches:

        return True

    else:

        return False

Python 2では正常に動作しますが、Python 3で使用しようとすると、次のエラーが発生します。

TypeError: a bytes-like object is required, not 'str'

この関数をPython2と3の両方で機能するようにきちんと変更する方法は私にはわかりません。ガイダンスを歓迎します。

居眠り

問題は、communicate()がバイト文字列を返し、program(i suppose)が文字列として渡される 'if program inline'を実行しようとしていることだと思います。文字列をバイト文字列に変換してみることができますif program.encode() in line and "defunct".encode() not in line

編集

'universal_newlines = True'をPopenに渡して、ストリームをテキストモードで開き、文字列を返すこともできますhttps://docs.python.org/3/library/subprocess.html#subprocess.Popen.communicate https ://docs.python.org/3/library/subprocess.html#subprocess.Popen.stdout

Python2とPython3の両方で機能します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ