質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1744閲覧

subprocess.Popenを用いコマンド実行時に、コマンドに可変パラメータを渡したい

pac727

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/08/29 09:09

前提・実現したいこと

python3でsubprocess.Popenを用い、ネット性能実測コマンド(iperf3)を実行しています。
Popen, iperf3そのものは問題なく実行できていますが、iperf3の-T(title)オプション活用で
つまずいています。

試行したコードと結果出力、および期待する出力を以下に示します。

python3

1>>> import subprocess 2>>> import sys 3>>> from time import sleep 4>>> 5>>> round_id=1 6>>> while True: 7... a=subprocess.Popen("iperf3 -c bouygues.iperf.fr -t 5 -T `date +%F_%T`.TCPround=$round_id ", shell=True) 8... sleep(30.0) 9... round_id+=1 10...

結果:

2018-08-29_17:13:03.TCPround=: Connecting to host bouygues.iperf.fr, port 5201 2018-08-29_17:13:03.TCPround=: [ 7] local 192.168.225.20 port 51698 connected to 89.84.1.222 port 5201   途中省略 2018-08-29_17:13:03.TCPround=: iperf Done. 2018-08-29_17:13:33.TCPround=: Connecting to host bouygues.iperf.fr, port 5201 2018-08-29_17:13:33.TCPround=: [ 7] local 192.168.225.20 port 51735 connected to 89.84.1.222 port 5201   途中省略 2018-08-29_17:13:33.TCPround=: iperf Done.

期待する出力:

2018-08-29_17:13:03.TCPround=1: Connecting to host bouygues.iperf.fr, port 5201 2018-08-29_17:13:03.TCPround=1: [ 7] local 192.168.225.20 port 51698 connected to 89.84.1.222 port 5201 途中省略 2018-08-29_17:13:03.TCPround=1: iperf Done. 2018-08-29_17:13:33.TCPround=2: Connecting to host bouygues.iperf.fr, port 5201 2018-08-29_17:13:33.TCPround=2: [ 7] local 192.168.225.20 port 51735 connected to 89.84.1.222 port 5201   途中省略 2018-08-29_17:13:33.TCPround=2: iperf Done.

iperf3の-Tオプションへ渡したいstringのうち、日時は問題なく渡っておりiperf3出力行のタイトルとして表示されますが、round_idは表示されません。 iperf3固有の問題ではなく、Python3でのパラメータの渡し方の問題かと思いますが解決方法をご教示ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Python3.6以降なら

a=subprocess.Popen(f"iperf3 -c bouygues.iperf.fr -t 5 -T `date +%F_%T`.TCPround={round_id} ", shell=True)

かなぁ。

投稿2018/08/29 09:41

tachikoma

総合スコア3601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pac727

2018/08/29 10:31

ありがとうございます。上記方法で期待する出力が得られました。 初めての質問のため、当方の環境表記していませんでした。python 3.7.0, macOS 10.13.5でした。  解法の ...Ponen(f".... {round_id} ", ...) ですが、ネット検索しても説明が見つかりませんでした。  f および { } はpython3の用語で何と検索すれば良いのでしょうか? ご教示頂けると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問