2017-11-29 17 views
0

私はpdfにプリントするためにクロムヘッドレスを使用しようとしています。私はWindows 10コマンドプロンプトを使用しています。私は、次の操作を行う場合は、すべてが期待どおりに動作:PythonからヘッドレスChromeを実行中

cd "C:\Program Files (x86)\Google\Chrome\Application" 

chrome --headless --print-to-pdf=c:\Users\timmc\Documents\a.pdf --disable-gpu https://www.google.com/ 

をしかし、最終的に私はsubprocess.call()と「プログラムファイル(x86の)」にスペースを使用してPythonスクリプトからこのコマンドを実行するように見えますトラブルを引き起こす可能性があります。私はスタックオーバーフローで他の答えを見てきましたが、動作するものは見つかりませんでした。私は次のことをしようとした場合:

C:\"Program Files (x86)"\Google\Chrome\Application\chrome --headless --print-to-pdf=c:\Users\timmc\Documents\b.pdf --disable-gpu https://www.google.com/ 

私はGoogleがヘッドレスモードで開きますではなく、いくつかの非常に異常な動作を取得し、それは二つのタブ、Googleとの1を開き、1はプログラム%のようなものを開こうとすると20--オリジナルプロセス開始時間%3D13156438844432514%20 - ファーストスタート%20ファイル%20%28x86%29。

誰でも上記の動作を説明できますか?

スペースを扱う簡単な方法はありますか?それはsubprocess.call()を使ってPythonスクリプト内で動作しますか?

同じことを達成する別の方法はありますか? (私はむしろセレンを使用しませんが、クロムヘッドレスを直接使用します)。

EDIT: 私は最終的に私のPythonスクリプトから実行するように期待していますコードは次のとおりです。

subprocess.call('C:\"Program Files (x86)"\Google\Chrome\Application\chrome --headless --print-to-pdf=c:\Users\timmc\Documents\b.pdf --disable-gpu https://www.google.com/',shell=True) 
+0

で説明したように、最後のバックスラッシュは、次の二重引用符をエスケープあなたは私たちがそれに多くなりこれ、あなたの実際のコードが何であるかを推測作っています助けるのが難しい。 –

+0

ありがとう、私は実際のコードを含めるために投稿を編集しました。私が含める必要があるものが他にもある場合は、言ってください。 – Tim

答えて

0

私はWindowsを実行していないので、私はあなたのための任意のテストを行うことはできませんが、私ができますおそらく正しい方向に向けるでしょう。

まず、大きな文字列の代わりにcallにパラメータのリストを使用する方が良い方法です。たとえば、subprocess.call("echo", "one two")の代わりにとします。これを行うことで、各パラメータが.callへの単一のパラメータとしてchromeに解釈される必要があるので、引用符で囲むことについて心配する必要はありません。

また、コマンドライン文字列の解釈は、Windowsで発生方法についてのドキュメントの下部にあるいくつかの情報があります:subprocess.call([ "LS"、 "-l"])

17.1.5.1 。 Windowsで文字列に引数シーケンスを変換する Windowsでは、argsシーケンスは、以下のルール(MS Cランタイムで使用されるルールに対応)を使用して解析できる文字列に変換されます。

引数は区切られますスペースまたはタブのいずれかの空白で囲みます。 二重引用符で囲まれた文字列は、その中に含まれる空白に関係なく、単一の引数として解釈されます。引用符で囲まれた文字列を引数に埋め込むことができます。 バックスラッシュの前にある二重引用符は、リテラルの二重引用符として解釈されます。 バックスラッシュは、二重引用符の直前にない限り、文字通り解釈されます。 バックスラッシュを二重引用符の直前に置くと、すべてのバックスラッシュがリテラルバックスラッシュとして解釈されます。バックスラッシュの数が奇数の場合、ルール3

https://docs.python.org/2/library/subprocess.html#converting-argument-sequence

+0

ありがとう、これは非常に便利です、私は大きな文字列の代わりにリストを使用しようとしましたが、私は今、私はエンコーディングのために思ったいくつかのエラーが発生していることを発見しました。 c:\ Users \ ... \ Uは私の元の問題を引き起こしていた問題だと思うので、私はエンコーディングに関する新しい質問を開始します。 – Tim

+0

しかし、あなたが提案したことは、確かに 'プログラムファイル'のスペースの問題を解決しました。 – Tim

関連する問題