

pythonのtweepyでスケジュールツイートをすることにして、pyファイルを呼び出して、そこにテキスト入力できるように、sys.argvを使って以下のバッチファイルを作りました。

[code]

    set /p Tweet="Tweet:"
    set /p Time="Time:" 
    Scheduler_Tweet.py %Tweet% %Time%
    
[/code]

一行だけをツイートするときにはこれで問題なく動くのですが、複数行をツイートしたいときに「\n」で改行させようとしたらそのまま文字としてツイートされてしまいました。

なにか改行を反映させる方法がありましたらお教えください。  
よろしくお願いいたします。

ちなみにScheduler_Tweet.pyの中は、

[code]

    auth = tweepy.OAuthHandler(CK, CS) 
    auth.set_access_token(AT, AS) 
    api = tweepy.API(auth)
    
    def job():  
     api.update_status(status=(sys.argv[1]))
    
    def main():     
     schedule.every().day.at((sys.argv[2])).do(job)
    
    
     while True:        
      schedule.run_pending()        
      time.sleep(1)
    
    main()
    
[/code]

です。


CC BY-SA 4.0
2022-07-11T02:25:32.687
89902
2022-07-11T05:13:36.370
2022-07-11T04:03:56.537
53470
53470
question
python windows cmd
batファイルでツイートをするときのテキストの改行方法


例えばこんな最小のスクリプトを作って`Scheduler_Tweet.py`の代わりにバッチファイルに指定して実行してみれば何が渡されてくるか分かるでしょう。  
入力された`\n`がそのまま表示されますね。

[code]

    import sys
    print(sys.argv[1])
    print(sys.argv[2])
    
[/code]

そしてこの辺の記事が対策になると考えられます。  
[Pythonでエスケープされた文字列を戻す](https://www.xn--ebkc7kqd.com/entry/python-unescape)  
[pythonでescapeされた（？）文字列をunescape（？）する方法のメモ](https://pod.hatenablog.com/entry/2018/08/30/210044)  
[How to un-escape a backslash-escaped string?
の回答](https://stackoverflow.com/a/57192592/9014308)

ただし、単純に適用するとASCII範囲外(全角文字や半角カナ)の文字が化けてしまうので、`.encode()`には上記英語版記事の回答を適用します。

上記スクリプトに適用すれば以下のようになるでしょう。

[code]

    import sys
    print(sys.argv[1].encode('latin1', errors='backslashreplace').decode('unicode-escape'))
    print(sys.argv[2].encode('latin1', errors='backslashreplace').decode('unicode-escape'))
    
[/code]

`Scheduler_Tweet.py`スクリプトのコマンドラインパラメータ文字列を取り出す該当部分を上記のようにして試してみてください。

参考：  
[str.encode(encoding='utf-8',
errors='strict')](https://docs.python.org/ja/3/library/stdtypes.html#str.encode)  
[bytes.decode(encoding='utf-8',
errors='strict')](https://docs.python.org/ja/3/library/stdtypes.html#bytes.decode)  
[標準エンコーディング](https://docs.python.org/ja/3/library/codecs.html#standard-
encodings)  
[テキストエンコーディング](https://docs.python.org/ja/3/library/codecs.html#text-
encodings)


CC BY-SA 4.0
2022-07-11T04:27:53.883
89907
2022-07-11T04:36:39.707
2022-07-11T04:36:39.707
26370
26370
89902
answer


コマンドプロンプトの引数として`\n`を渡した場合、改行コードの`\n`ではなく文字列の「\n(pythonソースコードの`"\\n"`または`r"\n"`表記)」が渡されます。  
[`tweepy.API.update_status`](https://docs.tweepy.org/en/stable/api.html#tweepy.API.update_status)に改行コードを送ることで改行を反映することができます。

**sample.py**

[code]

    import sys
    print(sys.argv[1])
    print(sys.argv[1].replace("\\n","\n"))
    
[/code]

上記のsample.pyに対して

> python .\sample.py ほげ\nふが  
>  を実行した結果は下記になります。
[code]

    ほげ\nふが
    ほげ
    ふが
    
[/code]


CC BY-SA 4.0
2022-07-11T05:13:36.370
89909
2022-07-11T05:13:36.370
9820
89902
answer