2017-11-28 7 views
0

私はUbuntuを使用しており、[ウェブサイトの名前]と[ファイルパス]をコマンドラインのリストに入力する必要がある簡単な自動化を試みています。私はサブプロセスと呼び出し関数を使用しています。私は "ls"コマンドを使ってもっと簡単なものを試しました。subprocess.callコマンドを使用してファイルパスを指す文字列をLinux端末に入力するにはどうすればよいですか?

from subprocess import call 
text = raw_input("> ") 
("ls", "%s") % (text) 

これらは、「buffsizeは整数である必要があります」として返されます。私はそれが何であるかを見つけようとしましたが、明らかにそのコマンドをリストとして渡さなければなりませんでした。だから私はコードしようとしている主なことをやってみた。

from subprocess import call 
file_path = raw_input("> ") 
site_name = raw_input("> ") 
call("thug", -FZM -W "%s" -n "%s") % (site_name, file_path) 

これらは、最初の "%s"で無効な構文として渡されました。誰かが私に正しい方向を向けることができますか?

+0

今日はほとんど同じ質問に答えて、例を示しましたhttps://stackoverflow.com/questions/47518944/open-new-gnome-terminal-and-run-command/47519082#47519082 – user1767754

+1

なぜあなたは'%'を 'tuple'に適用しようとしていますか? –

答えて

0

あなたはタプルに%を使用することはできません。

("ls", "%s") % text # Broken 

おそらく

("ls", "%s" % text) 

意味しかし、単に"%s" % stringは明らかに単にstringを返すために起こっているので、ここでのフォーマットを使用する必要はありません。

("ls", text) 

これは何も役に立ちません。 callを忘れましたか?

また、引数に引用符で囲まれていない文字列をcallに設定することはできません。

call("thug", -FZM -W "%s" -n "%s") % (site_name, file_path) # broken 

-FZM-Wが引用されている必要があり、あなたはフォーマット文字列を使用する場合は、再度、フォーマットは、フォーマット文字列に隣接して発生する必要があります。

call(["thug", "-FZM", "-W", site_name, "-n", file_path]) 

通知はまた、どのようcall()の最初の引数は適切なリスト、または(あなたがavoid if you canしたいあなたはshell=Trueを必要とし、その場合には、)長い単一の文字列のいずれかです。新しいスクリプトを書いている場合

、あなたが最も確実のPython 3をターゲット真剣を考えるべきである(その場合、あなたもsubprocess.run()input()代わりのraw_input()に旋回するようにしたいです)。 Python 2は数年前にもPy3kの採用がまだ遅かったため、数年後には戻ってしまいましたが、Python 2はすでにリリースされていました。もはやそうではありませんし、そうであってはなりません。あなたはPy3になりたい、それが未来のところです。

0

subprocess.callで実行可能なpythonファイルを呼び出す方法の完全な例を次に示します。​​を使用して入力を適切に解析します。

(sandboxArgParse.py)と呼ばれるあなたのpythonファイル:

import argparse  
parser = argparse.ArgumentParser() 

parser.add_argument("--filePath", help="Just A test", dest='filePath') 
parser.add_argument("--siteName", help="Just A test", dest='siteName') 
args = parser.parse_args() 
print args.siteName 
print args.filePath 

あなたの呼び出し元のpythonファイル:

from subprocess import call 


call(["python","https://stackoverflow.com/users/dev/python/sandboxArgParse.py", "--filePath", "abcd.txt", "--siteName", "www.google.com"]) 
+0

私は、コマンドライン引数を解析するのがインタラクティブな入力より**道のりが良いと完全に同意しますが、私はこの答えがOPを助けるとは思わないのです。 – tripleee

+0

:Dだからこそ、彼はあなたを@トリプルにしている!私はよりクリーンな代替ソリューションを提供しています。あなたの答えはおそらく問題を解決するでしょう、私の答えは美しさで物事を行う動機付けかもしれません。 – user1767754

関連する問題