Intro | Instalasi | Penggunaan | Sintaks | Pengaturan | Tentang
Alat untuk menjalankan banyak program yang ditulis dalam banyak bahasa dari satu file.
Biasanya untuk mempraktikkan beberapa bahasa pemrograman sekaligus Anda memerlukan beberapa file atau beberapa proyek, mungkin beberapa IDE. Runmany adalah alat yang memungkinkan Anda menulis beberapa program dalam file yang sama menggunakan bahasa pemrograman apa pun yang Anda inginkan, dan kemudian jalankan semuanya sekaligus.
Runmany menggunakan ". Banyak" sebagai ekstensi file, jadi misalnya, jika sebuah file yang disebut simple.many memiliki konten berikut:
Python:
print("Hi")
JavaScript:
console.log("Hi")
C:
#include <stdio.h>
int main() {
printf("Hin");
return 0;
}
Kemudian melakukan runmany simple.many di Terminal akan menghasilkan output terorganisir dari menjalankan program Python, JavaScript, dan C dalam:
************************************************************
1. Python
-------------------- output from line 1 --------------------
Hi
************************************************************
2. JavaScript
-------------------- output from line 4 --------------------
Hi
************************************************************
3. C
-------------------- output from line 7 --------------------
Hi
************************************************************
3/3 programs successfully run!
3/3 had the exact same stdout!
************************************************************
ARGV dan STDIN juga dapat ditentukan dalam file .sany banyak berdasarkan per-bahasa, dan ada banyak pengaturan yang dapat menyesuaikan bagaimana bahasa dijalankan dan ditampilkan dalam output.
Secara umum, runmany dapat digunakan untuk:
Secara keseluruhan Runmany adalah alat yang berguna bagi siapa saja yang ingin bermain dengan beberapa bahasa pemrograman sekaligus.
Pastikan Anda memiliki Python Versi 3.6 atau di atas yang diinstal, lalu jalankan
pip install runmany
Di Terminal untuk menginstal paket Runmany Python terbaru dari PYPI. Kemudian runmany <filename> harus bekerja untuk menjalankan file .yry. Lihat lebih banyak cara untuk menjalankan dalam penggunaan.
Runmany bekerja paling baik di vscode dengan ekstensi runmany vscode runmany yang menyediakan sintaksis sintaks untuk file. BANY dan cara cepat untuk menjalankannya. Pasang ekstensi secara gratis dari pasar atau dengan menjalankan:
code --install-extension discretegames.runmany
Anda juga memerlukan bahasa pemrograman yang Anda ingin runmany diinstal di komputer Anda karena runmany menggunakan penerjemah/kompiler mereka di belakang layar untuk benar -benar menjalankan program.
Runmany memiliki dukungan bawaan untuk bahasa-bahasa berikut:
Ada, Bash, Batch, C, C#, C++, Dart, Fortran, Go, Groovy, Haskell, Java, JavaScript, Julia, Kotlin, Lisp, Lua, MIPS, Pascal, Perl, PHP, PowerShell, Print, Python, Python 2, R, Racket, Ruby, Rust, Scala, TypeScript, VBScript, and Visual Basic
Artinya, jika Anda sudah menginstal salah satu bahasa ini, ada kemungkinan besar itu akan bekerja di Runmany secara otomatis.
Ekstensi VScode Runmany menyediakan sorotan sintaks untuk semua bahasa ini ditambah beberapa lagi.
Ada cara untuk menambahkan bahasa khusus dan mengubah perilaku bahasa bawaan, dan bahkan membuatnya berbeda pada sistem operasi yang berbeda. Untuk info lebih lanjut, lihat Bahasa Kustomisasi.
Perhatikan bahwa Print adalah bahasa utilitas yang hanya mencetak konten kode ke stdout, dan MIPS berharap mars.jar berada di direktori kerja saat ini.
Jika pip install runmany tidak berfungsi coba pip3 install runmany atau python -m pip install runmany atau python3 -m pip install runmany .
Di Windows, jika tidak ada yang berfungsi, Anda mungkin perlu memastikan instalasi Python dan direktori skrip ada di variabel lingkungan jalur Anda, kemudian restart terminal Anda dan coba lagi.
Runmany dibuat di Python 3.9 di Windows dan telah diuji secara menyeluruh pada versi Python 3.6, 3.7, 3.8, 3.9, dan 3.10 pada Windows. Ini juga harus berfungsi dengan baik di Linux dan MacOS tetapi telah kurang diuji secara luas pada sistem operasi tersebut, terutama ketika datang ke perintah yang menjalankan penerjemah/kompiler bahasa pemrograman lainnya.
Runmany sekarang di versi 2 dengan sintaks file. MANYY dan lebih banyak pengaturan. Versi 1.0.3 lama masih tersedia di PYPI.
Untuk menjalankan file runmany bernama myfile.many Gunakan perintah terminal:
runmany myfile.many
Ada juga argumen opsional untuk mendapatkan bantuan dan menentukan pengaturan pengaturan dan output:
runmany [-h --help] [-s --settings <settings-file>] [-o --outfile <output-file>] <input-file>
<input-file> Adalah file .sian yang diperlukan untuk dijalankan.<settings-file> adalah file .json opsional yang mendefinisikan bagaimana bahasa dijalankan dan bagaimana output diformat.<output-file> adalah file opsional untuk mengirim output ke. Ketika dihilangkan, output masuk ke stdout. Misalnya, perintah untuk menjalankan myfile.many dengan pengaturan mysettings.json dan mengirim output ke myoutput.txt adalah:
runmany -s mysettings.json -o myoutput.txt myfile.many
Ketika file pengaturan disediakan pada baris perintah, bagian pengaturan apa pun yang tertanam dalam file input diabaikan. Jika tidak ada, atau untuk pengaturan yang hilang, default_settings.json digunakan sebagai fallback. Lihat info lebih lanjut di Pengaturan.
Untuk beberapa contoh. Banyak file dan outputnya periksa folder contoh di github atau repo manychallenge di mana berbagai tantangan kode untuk situs seperti proyek Euler diselesaikan dalam banyak bahasa sekaligus.
Ekstensi. Banyak untuk file runmany tidak diperlukan tetapi direkomendasikan untuk kejelasan.
Runmany dapat diimpor dan digunakan dari Python sebagai berikut:
from runmany import runmany , runmanys
# Run to stdout
runmany ( 'path/to/myfile.many' , 'path/to/mysettings.json' ) # settings JSON is always optional
# Run to output file
runmany ( 'path/to/myfile.many' , 'path/to/mysettings.json' , 'path/to/myoutput.txt' )
# Run to file object
with open ( 'path/to/myoutput.txt' , 'w' ) as output_file :
runmany ( 'path/to/myfile.many' , 'path/to/mysettings.json' , output_file )
# Run to string
output_string = runmanys ( 'path/to/myfile.many' , 'path/to/mysettings.json' )
print ( output_string ) Dalam from_string=True runmany.runmany dan runmany.runmanys None Seperti halnya berjalan dari baris perintah, memberikan pengaturan di sini berarti semua pengaturan yang tertanam dalam file .sany diabaikan.
Fungsi runmany.cmdline , yang mengambil daftar argumen baris perintah, juga hadir sebagai alternatif untuk menggunakan baris perintah secara langsung.
Format file .Many adalah yang diharapkan Runmany ketika diberi file untuk dijalankan.
Pada prinsipnya, file .sians terdiri dari bagian yang masing -masing berisi satu atau lebih cuplikan. Sebuah bagian dimulai dengan garis header yang tidak bsip seperti Python: atau Stdin for Python: , lalu konten cuplikan pertama adalah apa yang muncul setelah usus besar dan pada baris indentasi di bawah ini. Cuplikan tambahan dapat ditambahkan ke bagian dengan yang tidak diindikasikan Also: header, dan bagian berakhir ketika yang baru dimulai atau End. atau akhir file tercapai.
File. Banyak berjalan dari atas ke bawah, mengeksekusi bagian dan cuplikan dalam urutan yang mereka temui. Khususnya, file .sany akan berjalan terlepas dari apakah ia memiliki kesalahan sintaks atau tidak. Sintaks yang tidak valid akan diabaikan dan disebutkan dalam pesan kesalahan.
Dalam contoh. Banyak file di bawah ini, bagian Stdin for Python: memiliki dua cuplikan, bar dan baz , dan mereka menjadi input standar untuk program Python di bagian Python: yang memiliki satu print('foo' + input()) . Menjalankan file ini menjalankan program Python dua kali, sekali untuk bar dan sekali untuk baz , memberikan masing -masing output foobar dan foobaz .
Stdin for Python:
bar
Also:
baz
End.
Python:
print('foo' + input())
End.
Baca terus untuk spesifik tentang semua sintaks. Banyak file, atau lihat sintaks. Banyak yang memiliki contoh semua sintaks juga.
%% Sebagai karakter non-whitespace pertama dalam satu baris membuat komentar sampai akhir baris itu.
%% this is a comment
Python: %% this is not a comment
%% this is a comment
print(1) %% this is not a comment
Tidak ada komentar blok, meskipun Start & Stop sudah dekat dalam fungsionalitas.
Seperti yang disebutkan, file .sany terdiri dari bagian yang dimulai dengan header dan berisi cuplikan. Ada empat jenis bagian:
<language>: atau <language1>, <language2>, ...:Argv: atau Argv for <language1>, <language2>, ...:Stdin: atau Stdin for <language1>, <language2>, ...:Settings: Semua kecuali bagian Pengaturan dapat memiliki daftar bahasa yang terpisah dari bahasa yang berlaku di header. Bahasa -bahasa ini, yang pernah dilucuti dari whitespace, harus cocok dengan kunci "name" bahasa dalam pengaturan JSON, tetapi tidak sensitif terhadap kasus. (Kata kunci seperti "argv" dan "stdin" adalah case sensitif. Bahasa khusus tidak boleh menggunakan kata kunci runmany sebagai nama atau mengandung karakter ,:%!@ .)
Header Also: digunakan untuk menambahkan cuplikan ke bagian dan End. secara opsional dapat digunakan untuk mengakhiri bagian.
Kandungan cuplikan adalah teks setelah spasi putih setelah usus besar ( : di header cuplikan, ditambah semua baris di bawah yang indentasi dengan satu tab atau 4 spasi (dengan indentasi ini dilepas), sampai header atau End. atau akhir file.
Jadi bagian kode ini
Python: import math
print(math.pi)
Also: print('pie')
print('cake')
memiliki dua cuplikan yang isinya adalah:
import math
print ( math . pi ) print ( 'pie' )
print ( 'cake' )Baris kosong di atas atau di bawah bagian hanya untuk keterbacaan dan tidak diperlukan. Kode yang tidak dikomentasikan di luar bagian tidak valid.
Bagian kode dimulai dengan daftar bahasa yang terpisah koma dan konten cuplikannya adalah program yang harus dijalankan dalam bahasa -bahasa tersebut.
Satu bahasa dalam daftar yang terpisah koma hampir selalu cukup kecuali Anda menulis poliglot,
JavaScript:
console.log('Some code that will be run in JavaScript.')
Python, Python 2:
print('Some code that will be run in Python 3 then Python 2.')
Also:
print('Some more code that will be run in Python 3 then Python 2.')
Also: header cuplikan di bagian kode adalah singkatan untuk mengulangi header bagian.
Argv adalah vektor argumen, alias argumen baris perintah yang dikirim ke program.
Bagian Argv dapat memulai Argv: untuk diterapkan pada semua bahasa, atau Argv for <language1>, <language2>, ...: untuk diterapkan pada bahasa dalam daftar yang dipisahkan koma. Either way menimpa argv sebelumnya yang ditetapkan untuk bahasa -bahasa tersebut.
Setiap cuplikan di bagian ARGV adalah argv terpisah yang akan dikirim pada gilirannya ke program bahasa yang berlaku untuk bagian tersebut. Ini membuatnya mudah untuk menguji banyak argv sekaligus.
Argv: argv sent to all languages
Argv for Python: 1
Also: 2
Also: 3
Python:
import sys
print(sys.argv[1])
Kode. Banyak ini akan menjalankan program Python tiga kali dengan Argv 1 lalu 2 lalu 3 .
Agar argv bekerja, placeholder $argv harus ditempatkan dengan benar ke dalam perintah bahasa.
Hampir persis seperti bagian ARGV tetapi untuk stream input standar pengguna biasanya mengetikkan teks.
Bagian STDIN dapat memulai Stdin: untuk diterapkan pada semua bahasa, atau Stdin for <language1>, <language2>, ...: untuk mendaftar ke bahasa dalam daftar yang dipisahkan koma. Either way menimpa set stdin sebelumnya untuk bahasa -bahasa tersebut.
Setiap cuplikan di bagian stdin adalah stdin terpisah yang akan dikirim pada gilirannya ke program bahasa yang berlaku untuk bagian tersebut. Ini membuatnya mudah untuk menguji banyak stdins sekaligus.
Stdin: stdin sent to all languages
Stdin for Python: A
Also: B
Also: C
Python:
print(input())
Kode. Banyak ini akan menjalankan program Python tiga kali dengan Stdin A kemudian B kemudian C .
Ketika beberapa argv dan stdins berlaku untuk satu bahasa, semua kemungkinan kombinasi dari setiap argv dan setiap stdin dikirim ke program bahasa itu.
Bagian Pengaturan dimulai dengan Settings: dan memungkinkan menyematkan pengaturan JSON dalam file .sany, yang digunakan sampai bagian pengaturan lain ditemui.
Pengaturan tertanam ini hanya digunakan ketika pengaturan tidak secara khusus disediakan ketika runmany dipanggil. Pengaturan yang hilang default ke nilainya di default_settings.json.
Settings:
{ "show_code": true }
Python:
print('this Python code will now be shown as part of the output')
String JSON dari jalur ke file pengaturan juga dapat digunakan, seperti Settings: "path/to/mysettings.json" .
Also: header cuplikan di bagian Pengaturan adalah singkatan untuk mengulangi header bagian. Jadi mereka tidak melayani banyak tujuan karena mereka segera menimpa pengaturan sebelumnya.
Menempatkan !! Pada awal header bagian menonaktifkan seluruh bagian dan semua cuplikannya.
Menempatkan ! Pada awal header snippet menonaktifkan cuplikan itu.
!!Python:
print('this is disabled')
Also:
print('this is also disabled')
!Python:
print('this is disabled')
Also:
print('this is not disabled')
!Also:
print('this is disabled')
Jika ada header bagian yang dimulai dengan @@ maka hanya bagian yang dijalankan, mirip dengan kotak centang "solo" dalam perangkat lunak pengeditan audio/video.
Jika ada header snippet dalam bagian mulai dengan @ maka hanya cuplikan yang dijalankan saat bagian berjalan.
@@@Python:
print('this is run')
Also:
print('this is not run')
@Also:
print('this is run')
Python:
print('this is not run')
@Also:
print('this is also not run')
Perhatikan bagaimana baris pertama memiliki tiga @@@ , dua untuk solo bagian dan lainnya untuk solo cuplikan pertamanya.
Semuanya sebelum START: Pada awal garis dengan sendirinya dalam file .sany diabaikan.
Semuanya setelah STOP. Pada awal garis dengan sendirinya dalam file .sany diabaikan.
Jadi hanya bagian JavaScript dari file ini yang dijalankan:
Python: print('unseen')
START:
JavaScript: console.log('seen')
STOP.
Python: print('unseen')
Seharusnya hanya ada satu START: dan satu STOP. dalam file .sany.
Pengaturan Runmany didefinisikan oleh file JSON yang dapat disediakan ketika runmany dipanggil atau langsung tertanam dalam file .sany.
Pengaturan JSON mendefinisikan bahasa apa yang dapat dijalankan oleh Runmany dan bagaimana itu akan menjalankannya. Ini juga mendefinisikan bagaimana output runmany akan diformat.
File default_settings.json memegang nilai default untuk semua pengaturan. Default ini secara otomatis digunakan jika tidak ada dalam pengaturan yang disediakan atau tertanam JSON.
Sebagian besar pengaturan adalah bendera atau nilai sederhana yang dapat diatur dalam pengaturan dasar objek JSON untuk menerapkannya secara global (lihat daftar pengaturan) tetapi empat tombol khusus di JSON digunakan untuk menyesuaikan bahasa yang dapat dijalankan oleh bahasa yang dapat dijalankan atau untuk menambahkan lebih banyak bahasa. Ini adalah "languages" , "languages_windows" , "languages_linux" dan "languages_mac" ( "languages_<os>" akan digunakan untuk merujuk ke tiga terakhir). Mereka adalah array objek JSON tingkat tunggal yang menentukan pengaturan untuk bahasa yang cocok dengan kunci "name" objek.
Array "languages_<os>" yang cocok dengan sistem OS memiliki prioritas tertinggi ketika menentukan pengaturan bahasa, diikuti oleh array "languages" , diikuti oleh array "supplied_languages_<os>" dan "supplied_languages" . (Array "supplied_languages..." ini tidak boleh diatur dalam pengaturan Anda JSON.) Bahasa menggunakan pengaturan di objek JSON pangkalan sebagai fallback akhir.
Misalnya, pengaturan berikut JSON menetapkan pengaturan "show_code" (yang salah secara default) untuk benar untuk semua bahasa kecuali untuk Python dan Python 2. Ini juga menciptakan bahasa baru "Python 3.10" yang dapat digunakan dalam header bagian file. Banyak di Windows.
{
"show_code" : true ,
"languages" : [
{ "name" : " Python " , "show_code" : false },
{ "name" : " Python 2 " , "show_code" : false }
],
"languages_windows" : [
{ "name" : " Python 3.10 " , "extension" : " .py " , "command" : " py -3.10 " }
]
} Kunci "name" diperlukan untuk setiap objek dalam array bahasa, dan tombol "command" dan "extension" harus selalu disediakan untuk bahasa kustom baru. Tidak setiap pengaturan masuk akal untuk diterapkan secara per-bahasa. Misalnya, "show_equal" berlaku untuk menjalankan file .sany secara keseluruhan, jadi itu hanya masuk akal dalam objek JSON pangkalan.
Semua pengaturan yang dijelaskan dan apakah mereka dapat ditimpa atau tidak berdasarkan bahasa dalam bahasa "languages" dan "languages_<os>" objek array:
| Kunci JSON | Jenis | Bawaan | Bisa diterbangkan | Keterangan |
|---|---|---|---|---|
"command" | rangkaian | "echo NOCOMMAND" | Ya | Perintah konsol untuk menjalankan bahasa, mengikuti format perintah. |
"extension" | rangkaian | "" | Ya | Perpanjangan file suatu bahasa, termasuk titik. |
"timeout" | mengambang | 10.0 | Ya | Batas waktu setiap program dalam hitungan detik, atau null tanpa batas waktu. |
"runs" | int | 1 | Ya | Berapa kali setiap program dijalankan. Hanya output dari menjalankan terakhir yang ditampilkan. |
"stderr" | rangkaian | "smart" | Ya | "yes" / true untuk menggabungkan program stderr dengan stdout. "no" / false untuk Menyembunyikan Program Stderr. "smart" / null untuk hanya menunjukkan Stderr ketika program memiliki kode keluar yang tidak nol. |
"spacing" | int | 1 | Ya | Jumlah baris kosong untuk ditambahkan setelah setiap berjalan. |
"newline" | rangkaian | "n" | Ya | Konten baru yang diganti dengan kode Code, Argv, dan Stdin. Atau null untuk default OS. |
"tab" | rangkaian | "t" | Ya | Apa karakter tab diganti dengan kode dalam kode, argv, dan stdin snippet. |
"cwd" | rangkaian | null | Ya | Direktori kerja saat ini untuk menjalankan program dari. Mungkin jalur relatif. Gunakan null atau "." karena tidak ada perubahan ke direktori kerja saat ini. |
"minimalist" | bool | false | TIDAK | Apakah akan menampilkan semua output dalam format minimal di mana pembagi, kode, argv, dan stdin tidak ditampilkan. |
"run_blanks" | bool | false | TIDAK | Apakah cuplikan kosong yang murni dari whitespace dijalankan atau diabaikan. |
"show_time" | bool | false | Ya | Apakah waktu eksekusi ditampilkan. Berguna untuk pengujian kinerja saat dikombinasikan dengan "runs" . |
"show_command" | bool | false | Ya | Apakah perintah yang digunakan untuk menjalankan setiap program ditampilkan. Berguna untuk debugging perintah untuk bahasa baru. |
"show_code" | bool | false | Ya | Apakah kode sumber program ditampilkan. |
"show_argv" | bool | true | Ya | Apakah argv untuk program ditampilkan (saat ada). |
"show_stdin" | bool | true | Ya | Apakah stdin untuk program ditampilkan (saat ada). |
"show_output" | bool | true | Ya | Apakah output untuk program ditampilkan. Ini termasuk stdout, dan, tergantung pada "stderr" , stderr. |
"show_runs" | bool | true | TIDAK | Apakah daftar lari ditampilkan. Ini biasanya sebagian besar output. |
"show_stats" | bool | true | TIDAK | Apakah jumlah keberhasilan dan kegagalan ditunjukkan setelah semuanya berjalan. |
"show_equal" | bool | true | TIDAK | Apakah stdouts yang cocok dibandingkan dan dikelompokkan setelah semuanya berjalan. |
"show_errors" | bool | true | TIDAK | Apakah kesalahan runmany seperti ` |
"strip_argv" | rangkaian | "smart" | TIDAK | "yes" / true untuk melucuti konten cuplikan dari whitespace memimpin dan membuntuti. "no" / false untuk menjaga konten cuplikan. "smart" / null untuk bergabung dengan semua baris di cuplikan bersama dengan spasi seolah -olah mereka berada di satu baris. |
"strip_stdin" | rangkaian | "smart" | TIDAK | "yes" / true untuk melucuti awal dan akhir cuplikan garis whitespace saja. "no" / false untuk menjaga konten cuplikan. "smart" / null untuk melakukan hal yang sama dengan "yes" / true tetapi juga menambahkan satu baris baru. |
"strip_code" | rangkaian | "smart" | Ya | "yes" / true untuk melucuti awal dan akhir cuplikan garis whitespace saja. "no" / false untuk menjaga konten cuplikan. "smart" / null untuk memperlakukan bagian atas file .sany sebagai awal dari cuplikan kode dengan semua bagian yang tidak relevan kosong sehingga kesalahan dalam program melaporkan nomor baris yang benar. |
"strip_output" | rangkaian | "no" | Ya | "yes" / true untuk melepaskan output program dari whitespace memimpin dan membuntuti. "no" / false untuk meninggalkan output program apa adanya. "smart" / null to strip output dari garis -garis terkemuka dan trailing kosong. |
Harus disebutkan bahwa kode, argv, dan bagian stdin dari output file .sany dilucuti dari garis kosong untuk menjaga hal -hal tetap bersih terlepas dari nilai "strip_code" , "strip_argv" , dan "strip_stdin" .
Kunci "command" dari suatu objek dalam array "languages" atau "languages_<os>" mendefinisikan perintah terminal yang dijalankan untuk mengeksekusi bahasa itu.
Placeholders seperti $file dan $dir dapat digunakan dalam perintah untuk merujuk pada file sementara yang dibuat Runmany untuk kode setiap program yang dijalankan dan direktori file yang disimpan di:
| Placeholder | Porsi .../dir/file.ext |
|---|---|
$rawdir | .../dir |
$dir | ".../dir" |
$rawfile | .../dir/file.ext |
$file | ".../dir/file.ext" |
$rawbranch | .../dir/file |
$branch | ".../dir/file" |
$name | file.ext |
$stem | file |
$ext | .ext |
$sep | / (Os spesifik) |
$argv | n/a - argv dimasukkan di sini |
$code | N/A - Konten Cuplikan Mentah |
Perhatikan bahwa beberapa placeholder "dikutip" dan beberapa tidak. Beberapa sistem operasi seperti Windows mungkin memiliki spasi di jalur ke file sementara sehingga penawaran yang benar adalah penting.
Jika $ tidak ada di mana pun di string perintah, $file $argv ditambahkan ke sana. Misalnya, perintah python secara implisit python $file $argv .
Periksa array "supplied_languages" di default_settings.json untuk lebih banyak contoh perintah.
Saya terdorong untuk membuat runmany dengan keinginan saya untuk belajar lebih banyak bahasa pemrograman, dikombinasikan dengan gangguan saya bahwa setiap kali saya mencoba, saya harus selalu membuat proyek baru untuk bahasa itu, atau bahkan beralih IDE.
Saya berencana menggunakannya untuk mempraktikkan pemecahan tantangan kode dalam berbagai bahasa dari situs seperti Project Euler.
Lihatlah beberapa paket Python saya yang lain.