Python
当我有一个命令行应用程序采用一个参数时,标准做法是什么
网页的URL
要么
磁盘上某处的HTML文件的路径
(只有一个)
代码足够了吗?
if "http://" in sys.argv[1]:
print "URL"
else:
print "path to file"
Run Code Online (Sandbox Code Playgroud) 有没有办法argv[0]
在Haskell程序中设置(比如用ghc编译的程序)?
我在System.Environment中找到了getProgName
和withProgName
函数,但它似乎没有改变什么ps
报告(Ubuntu).
import System.Environment
main =
do name <- getProgName
putStrLn $ "Hello, my name is " ++ name
withProgName "other" $ do
newname <- getProgName
putStrLn $ "Name now set to " ++ newname
putStrLn "What is your name: "
-- allow time to run ps
ans <- getLine
putStrLn $ "Pleased to meet you, " ++ ans
Run Code Online (Sandbox Code Playgroud) 如果您运行的是冷冻python脚本从一个目录(使用py2exe冻结)和驱动从那里脚本存在不同的,什么是确定执行脚本的路径的最佳方式?
我尝试过的解决方案很少
inspect.getfile(inspect.currentframe())
Run Code Online (Sandbox Code Playgroud)
问题:不返回完整路径.它只返回脚本名称.
os.path.abspath( __file__ )
Run Code Online (Sandbox Code Playgroud)
问题:在Windows上不起作用
os.path.dirname(sys.argv[0])
Run Code Online (Sandbox Code Playgroud)
问题:返回空字符串.
os.path.abspath(inspect.getsourcefile(way3))
Run Code Online (Sandbox Code Playgroud)
如果驱动器与pwd不同,则无法工作
os.path.dirname(os.path.realpath(sys.argv[0]))
Run Code Online (Sandbox Code Playgroud)
如果驱动器与pwd不同,则无法工作
这是一个最小的不工作的例子
D:\>path
PATH=c:\Python27\;c:\Users\abhibhat\Desktop\ToBeRemoved\spam\dist\;c:\gnuwin32\bin
D:\>cat c:\Users\abhibhat\Desktop\ToBeRemoved\spam\eggs.py
import os, inspect, sys
def way1():
return os.path.dirname(sys.argv[0])
def way2():
return inspect.getfile(inspect.currentframe())
def way3():
return os.path.dirname(os.path.realpath(sys.argv[0]))
def way4():
try:
return os.path.abspath( __file__ )
except NameError:
return "Not Found"
def way5():
return os.path.abspath(inspect.getsourcefile(way3))
if __name__ == '__main__':
print "Path to this script is",way1()
print "Path to this script is",way2()
print "Path to this script is",way3()
print "Path to this script is",way4()
print …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个带有任意命令行参数的应用程序,然后将它们传递给python函数:
$ myscript.py --arg1=1 --arg2=foobar --arg1=4
Run Code Online (Sandbox Code Playgroud)
然后在myscript.py里面:
import sys
argsdict = some_function(sys.argv)
Run Code Online (Sandbox Code Playgroud)
这里argsdict
看起来是这样的:
{'arg1': ['1', '4'], 'arg2': 'foobar'}
Run Code Online (Sandbox Code Playgroud)
我确定某个地方有一个图书馆可以做到这一点,但我找不到任何东西.
编辑: argparse/getopt/optparse不是我想要的.这些库用于定义每次调用相同的接口.我需要能够处理任意参数.
除非,argparse/optparse/getopt具有执行此操作的功能......
我将命令行上的可执行文件传递给我的python脚本.我做了一些计算,然后我想将STDIN上的这些计算结果发送到可执行文件.完成后我想从STDOUT获取可执行文件的结果.
ciphertext = str(hex(C1))
exe = popen([sys.argv[1]], stdout=PIPE, stdin=PIPE)
result = exe.communicate(input=ciphertext)[0]
print(result)
Run Code Online (Sandbox Code Playgroud)
当我打印时,result
我什么都没有,不是没有,是空行.我确信可执行文件可以处理数据,因为我使用命令行中的">"重复相同的操作,并使用相同的先前计算结果.
我是python的新手,我一直在玩argv.我在这里写了这个简单的程序并得到一个错误,上面写着:
TypeError:%d format:需要一个数字,而不是str
from sys import argv
file_name, num1, num2 = argv
int(argv[1])
int(argv[2])
def addfunc(num1, num2):
print "This function adds %d and %d" % (num1, num2)
return num1 + num2
addsum = addfunc(num1, num2)
print "The final sum of addfunc is: " + str(addsum)
Run Code Online (Sandbox Code Playgroud)
当我运行filename.py 2 2时,argv是否将2 2放入字符串中?如果是这样,我如何将这些转换为整数?
谢谢你的帮助.
我有一个std :: string包含一个用execv执行的命令,什么是最好的"C++"方法将它转换为execv()的第二个参数所需的"char*argv []"?
澄清:
std::string cmd = "mycommand arg1 arg2";
char *cmd_argv[];
StrToArgv(cmd, cmd_argv); // how do I write this function?
execv(cmd_argv[0], cmd_argv);
Run Code Online (Sandbox Code Playgroud) 在任何C程序中,命令行参数argv[0]
指向用于调用程序的名称.是否存在任何指向空字符串的情况""
?
这种情况的示例代码片段将是一个很好的参考.
可能重复:
关于main函数的命令行参数
我如何确定可以传递到C main的最大数据大小(int argc,char*argv)?标准中是否有一个宏来定义它?数据是否由主进程"拥有"(即我的程序是否存储此数据),还是由操作系统以某种方式"拥有",我可以获得指向它的指针?
当用户在 MySQL cli 中指定密码时,又名-pXXXXXX
,密码参数被替换为-p******
argv 数组。
因此,当有人使用 来检查进程列表时ps
,他们看不到密码。
我如何在 Python 中做同样的事情?这显然不起作用
for arg in sys.argv[1:]:
arg = ""
Run Code Online (Sandbox Code Playgroud)