Untuk python -csolusi yang berorientasi, dan asalkan Anda menggunakan shell Bash, ya Anda dapat memiliki sintaks satu baris sederhana seperti dalam contoh ini:
Misalkan Anda ingin melakukan sesuatu seperti ini (sangat mirip dengan sampel Anda, termasuk except: passinstruksi):
python -c "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
Ini TIDAK akan berfungsi dan menghasilkan Kesalahan ini:
File "<string>", line 1
from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n
^
SyntaxError: unexpected character after line continuation character `
Ini karena persaingan antara Bash dan Python Interpretation of \nescape sequence. Untuk mengatasi masalah ini, seseorang dapat menggunakan $'string'sintaks Bash untuk memaksa \ninterpretasi Bash SEBELUM Python. Untuk membuat contoh lebih menantang saya menambahkan end=..\n..spesifikasi Python yang khas dalam panggilan cetak Python: pada akhirnya Anda akan bisa mendapatkan \ninterpretasi KEDUA dari bash dan Python bekerja bersama, masing-masing pada bagian teks yang menjadi perhatian. Sehingga akhirnya solusi yang tepat adalah seperti ini:
python -c $'from __future__ import print_function\ntry:\n import numpy;\n print( numpy.get_include(), end="\\n" )\n print( "Hello" )\nexcept:pass\n' OUTPUT_VARIABLE __numpy_path
Itu mengarah ke hasil bersih yang tepat tanpa kesalahan:
/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include
Hello
Catatan: ini seharusnya bekerja juga dengan execsolusi berorientasi, karena masalahnya masih sama (kompetisi interpreter Bash dan Python).
Note2: seseorang dapat mengatasi masalah dengan mengganti beberapa \noleh beberapa ;tetapi tidak akan bekerja kapan saja (tergantung pada konstruksi Python), sementara solusi saya memungkinkan untuk selalu "satu baris" setiap bagian dari program Python multi-baris klasik.
Note3: tentu saja, ketika satu lapisan, seseorang harus selalu menjaga spasi dan lekukan Python, karena sebenarnya kami tidak hanya "satu lapisan" di sini, TETAPI melakukan pengelolaan campuran yang tepat dari \nurutan pelarian antara bash dan Python . Ini adalah bagaimana kita dapat menangani bagian manapun dari program Python multi-baris klasik. Contoh larutan juga menggambarkan hal ini.