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

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

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

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

Python

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

Q&A

解決済

1回答

1559閲覧

バッファリージョンをpythonの引数にしたい[Emacs]

hanayamaKaoru

総合スコア36

Emacs

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

Python

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

0グッド

1クリップ

投稿2017/05/10 09:19

編集2017/05/10 09:27

###前提・実現したいこと
Shell command on region : python hoge.pyとした時に、バッファリージョンがhoge.pyの引数となることを期待していますが、
うまくいきません。
解決策、代替案を教えて頂きたいです。

#詳細
*scratch*が以下の状態の時

aaa ccc bbb

aaaの行でM-hと入力し、パラグラフ全体をリージョンの範囲として選択する。
その後、M-|を入力し、ミニバッファが
Shell command on region :となり、sortと入力すると
リージョンの範囲がソートされて別のバッファに表示される。


この動作のようにバッファリージョンをコマンドの引数にしたいが、
pythonの引数にしようとするとうまくいかない
上記と同様の手順を行い
Shell command on region :に対して、python hoge.pyと入力する
しかし、以下のエラーメッセージが表示され、引数として受け取れていないことがわかります。
*hoge.pyのmain関数の引数としてバッファリージョンが適用されることを期待しています。

*hoge.pyはカレントディレクトリにあり、内容は以下の通りです。

def hoge(s): pass import sys argv = sys.argv print argv if __name__ == '__main__':hoge(argv[1])

#エラーメッセージ

['hoge.py']
Traceback (most recent call last):
File "hoge.py", line 7, in <module>
if name == 'main':hoge(argv[1])
IndexError: list index out of range

###環境
GNU Emacs 25.1.1
python 2.7

ProductName: Mac OS X
ProductVersion: 10.12.4
BuildVersion: 16E195

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

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

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

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

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

guest

回答1

0

ベストアンサー

shell-command-on-region は、リージョンの中身を「コマンドライン引数」ではなく 「標準入力」 で渡していませんか?

つまり、以下のようなコマンドが実行されているわけでは無く…

bash

1python hoge.py "aaa\nccc\nbbb\n"

以下のようなコマンドが実行されているということです。実際、上記のようなコマンドライン引数の形で変に長い文字列を渡されたくはないですしね。

bash

1echo "aaa\nccc\nbbb\n" | python hoge.py

というわけで、 sys.argv[1] を使うのではなく、 sys.stdin.read() 等を使って標準入力を読みだしてやるとうまくいくのではないでしょうか。

投稿2017/05/10 11:49

argparse

総合スコア1017

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問