소개 | 설치 | 사용법 | 구문 | 설정 | 에 대한
하나의 파일에서 많은 언어로 작성된 많은 프로그램을 실행하는 도구입니다.
일반적으로 여러 개의 프로그래밍 언어를 한 번에 연습하려면 여러 파일 또는 여러 프로젝트, 아마도 여러 IDE가 필요합니다. Runmany는 원하는 프로그래밍 언어를 사용하여 동일한 파일로 여러 프로그램을 작성한 다음 한 번에 모두 실행할 수있는 도구입니다.
Runmany는 ".many"를 파일 확장자로 사용하므로 예를 들어 simple.many 라는 파일에 다음 내용이있는 경우 :
Python:
print("Hi")
JavaScript:
console.log("Hi")
C:
#include <stdio.h>
int main() {
printf("Hin");
return 0;
}
터미널에서 runmany simple.many 수행하면 Python, JavaScript 및 C 프로그램을 실행하는이 체계적인 출력을 제공합니다.
************************************************************
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와 Stdin은 언어별로 .many 파일로 지정할 수 있으며 출력에서 언어가 실행되고 표시되는 방식을 사용자 정의 할 수있는 많은 설정이 있습니다.
일반적으로 Runmany는 다음에 사용될 수 있습니다.
전반적으로 Runmany는 한 번에 여러 프로그래밍 언어를 가지고 놀고 싶은 사람에게 유용한 도구입니다.
Python 버전 3.6 이상이 설치되어 있는지 확인한 다음 실행하십시오.
pip install runmany
터미널에서 PYPI에서 최신 Runmany Python 패키지를 설치합니다. 그런 다음 runmany <filename> .many 파일을 실행하기 위해 작동해야합니다. 사용으로 실행하는 더 많은 방법을보십시오.
Runmany는 VSCODE에서 Companion Runmany VScode Extension과 함께 가장 잘 작동하여 .many 파일에 대한 구문 강조 표시와 빠른 실행 방법을 제공합니다. 시장에서 무료로 확장을 설치하거나 달리기를 통해 :
code --install-extension discretegames.runmany
또한 Runmany는 실제로 프로그램을 실행하기 위해 통역사/컴파일러를 사용하기 때문에 Runmany가 컴퓨터에 실행하려는 프로그래밍 언어도 필요합니다.
Runmany는 다음 언어를 지원합니다.
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, Scala, Vbscript, vbscript, vbscript, vbscript, vbscript.
즉, 이러한 언어 중 하나를 이미 설치 한 경우 자동으로 Runmany에서 작동 할 가능성이 높습니다.
Runmany VScode 확장자는 이러한 모든 언어에 대한 구문 강조 표시와 몇 가지를 더 제공합니다.
사용자 정의 언어를 추가하고 내장 언어의 동작을 변경하고 운영 체제마다 다르게 만들 수있는 방법이 있습니다. 자세한 내용은 언어 사용자 정의를 참조하십시오.
Print 단순히 코드 컨텐츠를 stdout에 인쇄하는 유틸리티 언어이며 MIPS mars.jar 현재 작업 디렉토리에있을 것으로 기대합니다.
pip install runmany 작동하지 않은 경우 pip3 install runmany 또는 python -m pip install runmany 또는 python3 -m pip install runmany .
Windows에서는 작동하지 않으면 Python 설치 및 스크립트 디렉토리가 경로 환경 변수에 있는지 확인한 다음 터미널을 다시 시작하고 다시 시도해야 할 수도 있습니다.
Runmany는 Windows에서 Python 3.9에서 제작되었으며 Windows에서 Python 버전 3.6, 3.7, 3.8, 3.9 및 3.10에서 철저히 테스트되었습니다. 또한 Linux 및 MacOS에서는 잘 작동해야하지만 특히 다른 프로그래밍 언어의 통역사/컴파일러를 실행하는 명령과 관련하여 해당 운영 체제에서 광범위하게 테스트되었습니다.
Runmany는 이제 .many 파일 구문 및 더 많은 설정으로 개선 된 버전 2에 있습니다. 이전 1.0.3 버전은 여전히 PYPI에서 사용할 수 있습니다.
myfile.many 라는 runmany 파일을 실행하려면 터미널 명령을 사용하십시오.
runmany myfile.many
도움을 받고 설정 및 출력 파일을 지정할 수있는 선택적인 인수도 있습니다.
runmany [-h --help] [-s --settings <settings-file>] [-o --outfile <output-file>] <input-file>
<input-file> 실행해야 할 필요한 .many 파일입니다.<settings-file> 은 언어 실행 방법과 출력 형식의 형식을 정의하는 옵션 .json 파일입니다.<output-file> 은 출력을 보내는 선택적 파일입니다. 생략되면 출력은 stdout으로갑니다. 예를 들어, mysettings.json 설정하여 myfile.many 실행하라는 명령은 myoutput.txt 로 출력을 보냅니다.
runmany -s mysettings.json -o myoutput.txt myfile.many
명령 줄에서 설정 파일이 제공되면 입력 파일에 내장 된 모든 설정 섹션이 무시됩니다. 존재하지 않거나 누락 된 설정의 경우 Default_settings.json은 폴백으로 사용됩니다. 설정에서 더 많은 정보를 참조하십시오.
.many 파일의 일부 예와 출력의 경우 Github의 예제 폴더 또는 Project Euler와 같은 사이트의 다양한 코드 문제가 한 번에 여러 언어로 해결되는 많은 챌린지 리포지토리를 확인하십시오.
Runmany 파일의 .many 확장자는 필요하지 않지만 명확성을 위해 권장됩니다.
Runmany는 다음과 같이 Python에서 가져 와서 사용할 수 있습니다.
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 ) runmany.runmany 및 runmany.runmanys functions 모두에서 from_string=True .many 파일 인수가 파일 경로 대신 문자열로 해석되며, 설정 JSON 인수는 .json 파일 또는 JSON과 같은 Python Dictionary의 경로로 주어질 수 있거나 설정을 제공 할 None . 명령 줄에서 실행되는 것과 마찬가지로 여기에 설정을 제공하면 .many 파일에 포함 된 모든 설정이 무시됩니다.
명령 줄 인수 목록을 취하는 함수 runmany.cmdline 은 명령 줄을 직접 사용하는 대안으로 존재합니다.
.many 파일 형식은 파일을 실행할 때 Runmany가 기대하는 것입니다.
원칙적으로 .many 파일은 각각 하나 이상의 스 니펫이 포함 된 섹션으로 구성됩니다. 섹션은 Python: 또는 Stdin for Python: 과 같은 무례한 헤더 라인으로 시작합니다. 첫 번째 스 니펫의 내용은 콜론 이후에, 아래의 압축 선에서 나타납니다. 추가 스 니펫은 Also: 가없는 섹션에 추가 될 수 있으며 헤더는 새로운 하나가 시작되거나 결말이 End. 또는 파일의 끝에 도달합니다.
.many 파일은 위에서 아래로 실행되며, 직접적인 순서대로 섹션과 스 니펫을 실행합니다. 특히, .many 파일은 구문 오류가 있는지 여부에 관계없이 실행됩니다. 잘못된 구문은 오류 메시지에서 무시되고 언급됩니다.
Python: Stdin for Python: bar baz print('foo' + input()) 이 파일을 실행하면 Python 프로그램을 1 회, bar 용으로 한 번, baz 용으로 한 번 두 번 실행하여 각 출력 foobar 및 foobaz 제공합니다.
Stdin for Python:
bar
Also:
baz
End.
Python:
print('foo' + input())
End.
모든 .many 파일 구문에 대한 세부 사항을 읽거나 모든 구문의 예제가있는 구문을 확인하십시오.
한 줄의 첫 번째 비 whitescace 문자로서 %% 해당 줄의 끝까지 댓글을 달아줍니다.
%% this is a comment
Python: %% this is not a comment
%% this is a comment
print(1) %% this is not a comment
시작 및 정지가 기능이 가까워 지지만 블록 댓글이 없습니다.
언급했듯이 .many 파일은 헤더로 시작하고 스 니펫이 포함 된 섹션으로 구성됩니다. 섹션에는 네 가지 유형이 있습니다.
<language>: 또는 <language1>, <language2>, ...:Argv: 또는 Argv for <language1>, <language2>, ...:Stdin: 또는 Stdin for <language1>, <language2>, ...:Settings: 설정 섹션을 제외한 모든 내용에는 헤더에 적용되는 언어의 쉼표로 분리 된 목록이있을 수 있습니다. 한때 공백을 제거한이 언어는 JSON 설정에서 언어의 "name" 키와 일치해야하지만 사례에 민감하지 않습니다. ( "argv"및 "stdin"과 같은 키워드는 사례 에 민감합니다. 사용자 정의 언어는 이름으로 고 메니 키워드를 이름으로 사용하거나 문자를 포함해서는 안됩니다 ,:%!@ .)
헤더 Also: 섹션과 End. 선택적으로 섹션을 종료하는 데 사용할 수 있습니다.
스 니펫의 내용은 스 니펫 헤더에서 결장 ( : 후의 흰색과 공백 후 텍스트와 다음 헤더 또는 End. 또는 파일 끝.
그래서이 코드 섹션
Python: import math
print(math.pi)
Also: print('pie')
print('cake')
내용물이있는 두 개의 스 니펫이 있습니다.
import math
print ( math . pi ) print ( 'pie' )
print ( 'cake' )섹션 위 또는 아래의 빈 줄은 가독성에만 해당되며 필요하지 않습니다. 섹션 외부의 무정한 코드는 유효하지 않습니다.
코드 섹션은 쉼표로 구분 된 언어 목록으로 시작되며 스 니펫 내용은 해당 언어로 실행되는 프로그램입니다.
Comma 분리 목록의 한 언어는 Polyglots를 쓰지 않는 한 거의 항상 충분합니다.
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: 코드 섹션의 스 니펫 헤더는 섹션 헤더를 반복하기위한 속기입니다.
Argv는 인수 벡터, 즉 프로그램에 전송 된 명령 줄 인수입니다.
ARGV 섹션은 Argv: 모든 언어에 적용되거나 Argv for <language1>, <language2>, ...: 어느 쪽이든 해당 언어에 대해 이전의 ARGV 세트를 덮어 씁니다.
ARGV 섹션의 각 스 니펫은 섹션이 적용되는 언어의 프로그램으로 전송되는 별도의 ARGV입니다. 이로 인해 많은 ARGV를 한 번에 쉽게 테스트 할 수 있습니다.
Argv: argv sent to all languages
Argv for Python: 1
Also: 2
Also: 3
Python:
import sys
print(sys.argv[1])
이 .many 코드는 Argv 1 으로 3 번 Python 프로그램을 2 번 실행 한 다음 3 실행합니다.
Argv가 작동하려면 $argv 자리 표시자는 언어의 명령에 올바르게 배치해야합니다.
거의 ArgV 섹션과는 달리 표준 입력 스트림 사용자는 일반적으로 텍스트를 입력합니다.
stdin 섹션은 Stdin: 모든 언어에 적용하거나 Stdin for <language1>, <language2>, ...: 어느 쪽이든 해당 언어에 대한 이전의 stdin 세트를 덮어 씁니다.
Stdin 섹션의 각 스 니펫은 별도의 stdin으로, 섹션이 적용되는 언어의 프로그램으로 전송됩니다. 이로 인해 한 번에 많은 stdins를 쉽게 테스트 할 수 있습니다.
Stdin: stdin sent to all languages
Stdin for Python: A
Also: B
Also: C
Python:
print(input())
이 .many 코드는 Python 프로그램을 STDIN A 와 B C 3 번 실행합니다.
여러 ARGV와 Stdin이 하나의 언어에 적용되면 모든 ARGV와 모든 stdin의 가능한 모든 조합이 해당 언어의 프로그램으로 전송됩니다.
설정 섹션은 Settings: 으로 시작하고 다른 설정 섹션이 발생할 때까지 사용되는 .many 파일에 설정 JSON을 포함시킵니다.
이 내장 설정은 Runmany 호출시 설정이 구체적으로 제공되지 않은 경우에만 사용됩니다. 누락 된 설정이 default_settings.json의 값에 대한 기본값을 기본값으로합니다.
Settings:
{ "show_code": true }
Python:
print('this Python code will now be shown as part of the output')
Settings: "path/to/mysettings.json" 등 설정 파일로가는 경로의 JSON 문자열도 사용할 수 있습니다.
Also: 설정 섹션의 스 니펫 헤더는 섹션 헤더를 반복하기위한 속기입니다. 따라서 그들은 즉시 이전 설정을 덮어 쓰기 때문에 많은 목적을 제공하지 않습니다.
퍼팅 !! 섹션 헤더가 시작될 때 전체 섹션과 모든 스 니펫이 비활성화됩니다.
퍼팅 ! 스 니펫 헤더가 시작될 때 스 니펫이 비활성화됩니다.
!!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')
섹션 헤더가 @@ 로 시작하면 오디오/비디오 편집 소프트웨어의 "솔로"확인란과 유사한 해당 섹션 만 실행됩니다.
섹션 내의 스 니펫 헤더가 @ 로 시작하면 섹션이 실행될 때 해당 스 니펫 만 실행됩니다.
@@@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')
첫 번째 줄에 3 개의 @@@ , 2 개가있는 방법에 주목하십시오.
마지막 START: .many 파일의 줄 자체가 시작될 때 무시됩니다.
첫 번째 STOP. .many 파일의 줄 자체가 시작될 때 무시됩니다.
따라서이 .many 파일의 JavaScript 섹션 만 실행됩니다.
Python: print('unseen')
START:
JavaScript: console.log('seen')
STOP.
Python: print('unseen')
최대 한 번만 STOP. 해야합니다 START: .many 파일로.
Runmany의 설정은 runmany가 .many 파일에 직접 부름을 받거나 직접 내장 될 때 제공 할 수있는 JSON 파일로 정의됩니다.
JSON 설정은 Runmany가 실행할 수있는 언어와 실행 방법을 정의합니다. 또한 Runmany 출력이 형식화되는 방법을 정의합니다.
파일 default_settings.json은 모든 설정의 기본값을 보유합니다. 이러한 기본값은 제공된 설정 또는 임베디드 설정 JSON에 존재하지 않으면 자동으로 사용됩니다.
대부분의 설정은 기본 설정에서 설정할 수있는 간단한 플래그 또는 값이지만 전 세계적으로 적용하기 위해 JSON 개체 (설정 목록 참조)이지만 JSON의 4 개의 특수 키는 Runmany가 실행하거나 더 많은 언어를 추가 할 수있는 언어를 사용자 정의하는 데 사용됩니다. 이것들은 "languages" , "languages_windows" , "languages_linux" 및 "languages_mac" ( "languages_<os>" 입니다. 이들은 객체의 "name" 키와 일치하는 언어의 설정을 지정하는 단일 레벨 JSON 객체의 배열입니다.
시스템 OS와 일치하는 "languages_<os>" 배열은 언어 설정을 결정할 때 가장 우선 순위가 높으며 "languages" 배열이 뒤 따른 다음 "supplied_languages_<os>" 및 "supplied_languages" 배열이 뒤 따릅니다. (이 "supplied_languages..." 배열은 설정 JSON에서 설정해서는 안됩니다.) 언어는 Base JSON 객체의 설정을 최종 폴백으로 사용합니다.
예를 들어, 다음 설정 JSON은 Python 및 Python 2를 제외한 모든 언어에 대해 "show_code" 설정 (기본적으로 False)을 true로 설정합니다. 또한 Windows의 .many 파일 섹션 헤더에서 사용할 수있는 새로운 언어 "Python 3.10"도 생성합니다.
{
"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 " }
]
} 언어 배열의 모든 객체에 "name" 키는 필요하며, "command" 및 "extension" 키는 항상 새로운 사용자 정의 언어에 제공되어야합니다. 그래도 모든 설정이 언어별로 적용하는 것이 합리적 인 것은 아닙니다. 예를 들어, "show_equal" .many 파일의 전체 실행에 적용되므로 Base JSON 객체에서만 의미가 있습니다.
설명 된 모든 설정 및 "languages" 및 "languages_<os>" 배열 객체에서 언어별로 상체 될 수 있는지 여부 :
| JSON 키 | 유형 | 기본 | 대체 가능 | 설명 |
|---|---|---|---|---|
"command" | 끈 | "echo NOCOMMAND" | 예 | 명령 형식에 따라 언어를 실행하는 콘솔 명령. |
"extension" | 끈 | "" | 예 | 도트를 포함한 언어의 파일 확장. |
"timeout" | 뜨다 | 10.0 | 예 | 각 프로그램의 시간 제한은 초 단위로 또는 시간 제한없이 null . |
"runs" | int | 1 | 예 | 각 프로그램이 실행되는 횟수. 마지막 실행의 출력 만 표시됩니다. |
"stderr" | 끈 | "smart" | 예 | "yes" / true Program Stderr와 Stdout을 결합합니다. "no" / false 프로그램 Stderr를 숨기고 있습니다. 프로그램에 0이 아닌 출구 코드가있을 때만 STDERR 만 표시하는 "smart" / null . |
"spacing" | int | 1 | 예 | 각 실행 후 추가 할 빈 줄의 수. |
"newline" | 끈 | "n" | 예 | 코드, Argv 및 Stdin 스 니펫 컨텐츠에서 Newlines가 대체되는 것. 또는 OS 기본값의 경우 null . |
"tab" | 끈 | "t" | 예 | Code, Argv 및 Stdin 스 니펫 내용으로 탭 문자가 대체되는 것. |
"cwd" | 끈 | null | 예 | 프로그램을 실행하려는 현재 작업 디렉토리. 상대적인 경로 일 수 있습니다. null 또는 "." 현재 작업 디렉토리를 변경하지 않습니다. |
"minimalist" | 부 | false | 아니요 | 분배기, 코드, ARGV 및 STDIN이 표시되지 않는 최소한의 형식으로 모든 출력을 표시할지 여부. |
"run_blanks" | 부 | false | 아니요 | 순수한 공백으로 구성된 빈 스 니펫이 실행되거나 무시되는지 여부. |
"show_time" | 부 | false | 예 | 실행 시간이 표시되는지 여부. "runs" 와 결합 될 때 성능 테스트에 유용합니다. |
"show_command" | 부 | false | 예 | 각 프로그램을 실행하는 데 사용되는 명령이 표시됩니다. 새로운 언어에 대한 명령을 디버깅하는 데 유용합니다. |
"show_code" | 부 | false | 예 | 프로그램의 소스 코드가 표시되는지 여부. |
"show_argv" | 부 | true | 예 | 프로그램에 대한 ARGV가 표시되는지 여부 (존재하는 경우). |
"show_stdin" | 부 | true | 예 | 프로그램의 stdin이 표시되는지 (존재하는 경우). |
"show_output" | 부 | true | 예 | 프로그램의 출력이 표시되는지 여부. 여기에는 stdout과 "stderr" 에 따라 Stderr가 포함됩니다. |
"show_runs" | 부 | true | 아니요 | 실행 목록이 표시되는지 여부. 이것은 일반적으로 출력의 대부분입니다. |
"show_stats" | 부 | true | 아니요 | 모든 것이 실행 된 후 성공과 실패 수가 표시되는지 여부. |
"show_equal" | 부 | true | 아니요 | 일치하는 stdouts가 모든 것이 실행 된 후 비교되고 그룹화되는지 여부. |
"show_errors" | 부 | true | 아니요 | Runmany 오류가`.와 같은 오류 여부 |
"strip_argv" | 끈 | "smart" | 아니요 | "yes" / true LEADING 및 후행 공백의 스 니펫 내용을 제거합니다. "no" / false 스 니펫 내용을 그대로 유지합니다. "smart" / null 한 줄에있는 것처럼 공간과 함께 스 니펫의 모든 라인을 결합합니다. |
"strip_stdin" | 끈 | "smart" | 아니요 | "yes" / true 공백 전용 라인 스 니펫의 시작과 끝을 제거하는 것이 사실입니다. "no" / false 스 니펫 내용을 그대로 유지합니다. "smart" / null "yes" / true 와 동일하게 수행하지만 단일 Newline을 추가합니다. |
"strip_code" | 끈 | "smart" | 예 | "yes" / true 공백 전용 라인 스 니펫의 시작과 끝을 제거하는 것이 사실입니다. "no" / false 스 니펫 내용을 그대로 유지합니다. "smart" / null MANY 파일의 상단을 코드 스 니펫의 시작으로 처리하여 모든 관련이없는 부품이 비워지면 프로그램의 오류가 올바른 줄 번호를보고합니다. |
"strip_output" | 끈 | "no" | 예 | "yes" / true to True to Strip Program 출력 및 후행 공백. "no" / false 프로그램 출력을 그대로 두는 것입니다. "smart" / null TO TO BIMPLING LEADING LINE의 프로그램 출력. |
.many 파일 출력의 코드, Argv 및 Stdin 부분은 빈 줄이 벗겨져있어 "strip_code" , "strip_argv" 및 "strip_stdin" 의 값에 관계없이 시각적으로 깨끗하게 유지할 수 있습니다.
"languages" 또는 "languages_<os>" 배열에서 객체의 "command" 키는 해당 언어를 실행하기 위해 실행되는 터미널 명령을 정의합니다.
$file 및 $dir 와 같은 자리 표시자는 명령에 사용하여 실행되는 각 프로그램의 코드와 파일이 저장된 디렉토리에 대해 Runmany가 생성하는 임시 파일을 참조 할 수 있습니다.
| 자리 표시 자 | .../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 특정) |
$argv | N/A- ARGV가 여기에 삽입됩니다 |
$code | N/A- 원시 스 니펫 함량 |
일부 장소 보유자는 "인용"이며 일부는 그렇지 않습니다. Windows와 같은 일부 운영 체제는 임시 파일로가는 경로에 공간이있을 수 있으므로 올바른 인용문이 중요합니다.
$ 명령 문자열의 어느 곳에도 존재하지 않으면 $file $argv 추가됩니다. 예를 들어, python 명령은 암시 적으로 python $file $argv 입니다.
더 많은 명령의 예는 default_settings.json에서 "supplied_languages" 배열을 확인하십시오.
나는 더 많은 프로그래밍 언어를 배우려는 욕구로 인해 런만을 만들려고 노력했으며, 시도 할 때마다 나는 그 언어에 대한 완전히 새로운 프로젝트를 만들거나 심지어 ID를 전환해야한다는 성가심과 결합했습니다.
프로젝트 Euler와 같은 사이트에서 여러 언어로 코드 문제를 해결하는 데 사용할 계획입니다.
다른 Python 패키지 중 일부를 확인하십시오.