如何判断stderr是否已在Windows中重定向?

时间:2017-02-09 14:47:06

标签: c++ c windows winapi console

我希望我的程序在stderr连接到控制台和重定向到文件/管道之间有不同的行为。在Unix系统中,我只能测试isatty(STDERR_FILENO),但我如何在Windows中执行此操作? MSVCRT还有一个名为_isatty的函数,它无法正常运行(例如,Detect NUL file descriptor (isatty is bogus))。我可以调用任何Windows或NT API来测试它吗?

2 个答案:

答案 0 :(得分:3)

  1. 调用import requests def put_file(credentials, local_file_name): """This function writes file content to Object Storage V3 """ url1 = ''.join(['https://identity.open.softlayer.com', '/v3/auth/tokens']) data = {'auth': {'identity': {'methods': ['password'], 'password': {'user': {'name': credentials['name'],'domain': {'id': credentials['domain']}, 'password': credentials['password']}}}}} headers = {'Content-Type': 'text/csv'} with open(local_file_name, 'rb') as f: resp1 = requests.post(url=url1, data=f, headers=headers) return resp1 获取stderr句柄。
  2. 将该句柄传递给GetStdHandle,以找出它是什么类型的文件。
  3. 如果返回GetFileType,则stderr可以是控制台,但请调用FILE_TYPE_CHAR进行检查。
  4. 如果GetConsoleMode失败,则stderr已重定向到另一个角色设备,例如打印机。

答案 1 :(得分:0)

对我来说,最简单的方法是使用fseek(stderr, 0, SEEK_CUR),如果将0重定向到某个文件则会返回stderr,如果<>0不是stderr则会identifiers重定向。