まず、単純に
cmd
1start 'https://www.google.co.jp/'
2start "https://www.google.co.jp/"
あたりをコマンドプロンプトで実行しすると、期待通りにならないことが分かります。
https://tugi.hatenablog.com/entry/2014/09/18/204239
普通なら " で囲えば無効化できるのだが、
どうもstartやechoなどの内部コマンドでは、これが使えない様子。
こういう場合は ^ を使ってエスケープすれば通る。
とあるので、質問のURLに対して 1. '
や"
で括らない 2. &
を^&
に置き換えてコマンドプロンプトで
cmd
1start https://search.yahoo.co.jp/search?p=%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88+%26+%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97^&fr=top_ga1_sa^&ei=UTF-8^&ts=1225^&aq=-1^&oq=^&at=^&ai=
を試しました。すると期待通りに動きます。
(ところで、私の手元ではこの検索でヒットした一番上のページが↑の記事でした……)
したがってPythonでも同じように&
を^&
に手で置き換えた
python
1import subprocess
2
3url = 'https://search.yahoo.co.jp/search?p=%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88+%26+%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97^&fr=top_ga1_sa^&ei=UTF-8^&ts=1225^&aq=-1^&oq=^&at=^&ai='
4
5proc = subprocess.run(f"start {url}", stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell=True)
6print(proc.stdout.decode("cp932"))
を試します。
(これが期待通りに動くことを確認しないかぎり、次のステップを考えるのは無駄ですから)
動くことが確認できたらコードで変換することを考えましょう。
単純に置換でよしとするなら、
python
1import subprocess
2
3url = 'https://search.yahoo.co.jp/search?p=%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88+%26+%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97&fr=top_ga1_sa&ei=UTF-8&ts=1225&aq=-1&oq=&at=&ai='
4
5proc = subprocess.run(f"start {url.replace('&', '^&')}", stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell=True)
6print(proc.stdout.decode("cp932"))
でいいでしょう。